【Android ROM定制】CyanogenMod源码下载和编译
【Android ROM定制】CyanogenMod源码下载和编译
前言:
CyanogenMod源码下载和编译是一个耗时、耗精力、耗人品的工程,如果你有足够的毅力、耐心,以及做好了承受各种下载出错、编译出错、固化出错打击的心理准备,请一步一步往下看。考虑到Cyanogenmod支持的手机设备有限,以及广大Android编程爱好者的手机设备差异,本blog是以手机HTC Aria(liberty) 下载、编译Cyanogenmod 7 、并生成固件烧写到手机为例,引导读者根据自己的手机设备选择其支持的Cyanogenmod版本以及其源码分支进行Cyanogenmod源码的下载、编译、固化。
Ps.笔者查看各种资料,从Cyanogenmod是什么都不知道到最终成功下载Cyanogenmod源码、编译、生成固件、在手机上运行CM7系统共折腾了1个星期。其中下载源码耗时3天,每天晚上半夜爬起来看是否全部下载完成。编译3天,包括处理各种编译出错,生成固件并运行系统并利用该系统拨打第一个电话成功时,兴奋之情无以言表,历史的一刻,就像中国发送第一封国际电子邮件一样开启中国互联网时代,开启了自己的Android系统深入学习之路,这还只是开始,后面的路还很长。
一、Cyanogenmod
1、Cyanogenmod官方支持的手机设备
Cyanogenmod官方支持的手机设备类型有Htc、Samsung、Huawei、Sony等其各自旗下的主流型号,详细的信息请查阅Cyanogenmod官方网址:http://wiki.cyanogenmod.org/w/Devices#vendor=;,可以查看Cyanogenmod官方支持的手机设备。
在vendor标签中选中Htc,可看到笔者的手机HTC Aria(liberty),表明支持Cyanogenmod编译生成的固件,如下图所示:
2、手机设备支持的CM版本号
查看手机设备支持的CM版本号直接关系到CM源码分支的选择,比如笔者手机是HTC liberty,其支持的CM版本号是CM 7,其对应的分支是gingerbread。
了解完自己的手机是否支持Cyanogenmod源码编译生成的固件和其支持的CM version。接下来就开始搭建环境、下载、编译CM源码了。二、环境搭建
1、 ubuntu系统安装
笔者编译的是CyanogenMod 7稳定版、Android源码2.3系列,而Android 2.3系统限制必须使用32位(Android4支持64位系统),故使用ubuntu10.3 32位系统。详细安装步骤请参考网上的安装教程,已安装ubuntu 32位系统请跳过。
2、 安装JDK6
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get installsun-java6-jdk
3、 安装编译所需要的包 (Ubuntu 10.04-- 11.10)
$ sudo apt-get installgit-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-devlib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-devlib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodospython-markdown \
libxml2-utils xsltproc
4、 配置USB访问权限
(1)、默认将htc类型手机通过usb连接上电脑之后,使用adb devices是没有权限访问手机设备的,如下图所示:
tip:这里要使用到adb工具,如果ubuntu系统安装了android eclipse开发工具,默认是自带adb工具的。
(2)、将设备连接上电脑,查看手机的usb设备:
htc 手机对应的usb设备信息如下: 如下图所示:(3)、修改51-android.rules文件:
添加一行信息,特别注意,ATTR{idVendor} 与ATTR{idProduct}的值分别于ID 0bb4:0c92对应。# fastboot protocol onmanta (htc liberty)
SUBSYSTEM=="usb",ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c92",MODE="0600", OWNER="ubuntu"
(4)、保存文件后,重新将手机连接到电脑,使用adb devices查看设备的连接状态,可发现已经拥有了访问usb的权限。
(5)、详细请参考:
http://source.android.com/source/initializing.html Configuring USB Access小节
三、下载源码
1、 安装Repo
//从用户根目录开始
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
2、下载源码
(1)、 如何选择分支
笔者的手机是htc G9,支持的CM verison :gingerbread,选择手机设备所支持分支的详细步骤,请参考本blog 1.2、手机设备支持的CM版本号
笔者最终选择的分支是:gingerbread-release
查看https://github.com/CyanogenMod/android.git下所支持的所有分支,如下图所示是分支gingerbread-release。
(2)、使用repo执行下载
//从用户根目录下开始,分别创建文件夹CyanogenMod/android/CM-7
$cd ./CyanogenMod/android/CM-7
//获取gingerbread-release的分支源代码
$repo init -u git://github.com/CyanogenMod/android.git -b gingerbread-release
//同步服务器代码到本地,-j16据网友反应是多开网络连接,从而能提高下载速度
$repo sync -j16
下载成功后,在CyanogenMod/android/CM-7/device文件夹会包含如下所示文件夹,以此判断源码是否下载完整。发现device文件夹里已经包含了htc文件夹,如图所示:
点击htc文件夹进入可发现liberty已安静的躺在那,如图所示:
四、编译源码
1、 读取手机上的一些私有配置文件
将htc手机连接上ubuntu系统,可能没有usb访问权限,具体请参考2.4 配置USB访问权限
2、 生成编译脚本文件
$cd ~/CyanogenMod/android/CM-7/vendor/cyanogen
$./get-rommanager
$./extract-google-files
//复制编译脚本文件到目录下,后面编译整个系统用的就是这个文件
$cp ~/CyanogenMod/android/CM-7/vendor/cyanogen/products/cyanogen_lieberty.mk ~/CyanogenMod/android/CM-7/buildspec.mk
执行./get-rommanager运行结果如图所示:
3、 编译脚本
回到CyanogenMod/android/CM-7目录下,执行脚本。
//初始化脚本,这个是后面的重要基础步骤
$cd ~/CyanogenMod/android/CM-7
$source build/envsetup.sh
//选择编译的产品,这个命令需要一小会儿时间,但是又没提示,耐性等待一下
//或直接执行lunch命令,查看list选项来选择执行哪个版本
$lunch cyanogen_liberty-eng
//开始编译
$make -j4 CYANOGEN_WITH_GOOGLE=true otapackage
编译成功显示如下信息,这张图片来的相当不容易,半夜起来截的图:
4、编译可能产出的错误分析(如果没有问题可直接跳过,执行第5步:生成刷机zip包操作):
错误原因:无法访问文件: corrupted zip file
错误原因分析:没有选择正确jar版本,默认情况下选择的是/usr/bin/fastjar自动模式,通过sudo update-alternatives --config jar选择jdk6即可。
问题解决:
32位ubuntu编译android2.3,无法访问 java.lang.Object问题 http://hi.baidu.com/cmdmac/item/93920ff30164270884d278a4
编译android 2.3.4的一个错误http://blog.163.com/covel_zhang/blog/static/81641365201223122541768/
5、生产刷机zip包。
在CyanogenMod/android/CM-7目录下执行如下脚本:
生成固件包成功,显示如下图所示信息:五、刷机
将cm-7-20131119-UNOFFCIAL-liberty.zip包刷到我htc手机上一切正常,有图有真相,留心"关于手机"修订版本选项,正是第5步生成的刷机包cm-7-20131119-UNOFFCIAL-liberty.zip。
六、参考:
Android拓展系列(5)--CyanogenMod源码下载和编译(Android ROM定制基础篇)
Android 第三方ROM CyanogenMod 源码下载,编译,刷机
http://source.android.com/source/initializing.html
http://source.android.com/source/building.html
七、小结:
本文以笔者自身的CyanogenMod源码编译折腾经历描述了利用第三方开源系统定制个性化ROM的过程,之所以要记录这篇博文,完全是本着前人栽树后人乘凉的宗旨,让遇到同样需求的开发者不至于像笔者如此折腾,或者说折腾的少一些,如此,笔者心满意足。最后,本博文虽经笔者多次校验,但难免会有疏漏之处,敬请指正,笔者将在第一时间给予答复指正。
转载请注明出处:http://blog.csdn.net/andie_guo/article/details/16879443
原文链接: https://blog.csdn.net/andie_guo/article/details/16879443