前言:
CyanogenMod 源代码下载和编译是一个耗时耗能、耗费字符的工程。如果你有足够的毅力、耐心,并有心理准备承受各种下载错误、编译错误、固化错误,请一步步向下滚动。考虑到Cyanogenmod支持的移动设备数量有限,以及绝大多数Android编程爱好者的移动设备差异,本博客以手机HTC Aria(自由)下载、编译Cyanogenmod 7、生成固件为以烧录到手机为例,指导读者根据自身情况选择手机设备支持的Cyanogenmod版本及其源码分支,下载、编译、固化Cyanogenmod源码。
附言。笔者查了各种资料,花了我一周的时间,终于把Cyanogenmod的源码下载下来,编译,生成固件,在手机上运行CM7系统。下载源代码需要3天,每天半夜起来看是否全部下载完成。编译3天,包括处理各种编译错误、生成固件和运行系统以及使用系统拨打第一个电话,激动之情溢于言表,历史的一刻,就像中国发送第一封国际邮件一样,我们在中国开启了互联网时代,开启了我们自己的安卓系统深度学习之路。这只是一个开始,还有很长的路要走。
一、氰化模组
1、Cyanogenmod 官方支持的移动设备
Cyanogenmod官方支持的移动设备类型包括Htc、三星、华为、索尼等各自品牌的主流机型。详细信息请参考Cyanogenmod官网:#vendor=;,可以查看Cyanogenmod官方支持的移动设备。
在vendor选项卡中选择Htc,可以看到作者的手机HTC Aria(liberty),说明支持Cyanogenmod编译生成的固件,如下图:
2、移动设备支持的CM版本号
查看移动设备支持的CM版本号直接关系到CM源代码分支的选择。比如作者的手机是HTC liberty,它支持的CM版本号是CM 7,对应的分支是姜饼。
CM Support: 7
Latest CM version: gingerbread
查看你的手机是否支持Cyanogenmod源码编译生成的固件及其支持的CM版本。接下来开始搭建环境安卓源码编译教程,下载并编译CM源码。
二、环境建设
1、ubuntu系统安装
作者编译CyanogenMod 7稳定版,Android源码2.3系列,Android2.3系统限制必须使用32位(Android4支持64位系统),所以使用ubuntu1< @0.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
对于Ubuntu 12.04,请参考安装编译所需的包:
4、配置 USB 访问
(1)、htc型手机默认通过usb连接电脑后,使用adb devices没有权限访问手机设备,如下图:
提示:这里使用 adb 工具。如果Ubuntu系统安装了android eclipse开发工具,默认为adb工具。
(2),将设备连接到电脑,查看手机的usb设备:
ubuntu@andy-laptop:~$lsusb
htc手机对应的usb设备信息如下:
Bus 002 Device 004: ID 0bb4:0c92 High Tech Computer Corp.
如下图:
(3),修改51-android.rules文件:
ubuntu@andy-laptop:sudo gedit /etc/udev/rules.d/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),请参考:
配置 USB 访问部分
三、下载源代码
1、 安装回购
//从用户根目录开始
$ 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。移动设备支持的分支选择详细步骤请参考这篇博客1.2、移动设备支持的CM版本号
p>
我最后选择的分支是:gingerbread-release
查看所有支持的分支,下图为分支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
repo 命令使用参考:
特别提醒:关于姜饼分支,我下载后发现CyanogenMod/android/CM-7/device目录下没有对应htc和三星系列手机的版本。折腾了半天安卓源码编译教程,终于选择了gingerbread-release这个分支。下载源码,在CyanogenMod/android/CM-7/device目录下成功获取各种手机的对应版本。
下载成功后,CyanogenMod/android/CM-7/device文件夹中会包含以下文件夹,判断源代码是否下载完整。发现设备文件夹中已经包含htc文件夹,如图:
点击htc文件夹进入,发现liberty静静躺在那里,如图:
四、编译源码
1、读取手机上的一些私有配置文件
htc手机连接ubuntu系统,可能没有usb访问权限,请参考2.4配置USB访问权限
$cd ~/CyanogenMod/android/CM-7/device/htc/liberty
$./extract-files.sh
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
执行lunch命令,选择119,显示信息如下图:
编译成功后显示如下信息。这张照片来之不易。半夜起来截图:
4、编译可能产生的错误分析(如果没有问题可以直接跳过,执行第5步:生成flash zip包操作):
错误原因:无法访问文件:zip 文件损坏
错误原因分析:没有选择正确的jar版本。默认选择/usr/bin/fastjar自动模式,通过sudo update-alternatives –config jar可以选择jdk6。
问题解决:
32位ubuntu编译android2.3,无法访问java.lang.Object问题
编译android时出错2.3.4
5、制作flash zip包。
在CyanogenMod/android/CM-7目录下执行如下脚本:
$./vendor/cyanogen/tools/squisher
固件包生成成功,显示如下图信息:
五、闪光
我刷了cm-7-20131119-UNOFFCIAL-liberty.zip包到我的htc手机,一切正常,有图有真相,注意“关于手机”修改选项,就是刷机包cm-7-20131119-UNOFFCIAL-liberty.zip。
六、参考:
Android扩展系列(5)–CyanogenMod源码下载编译(Android ROM定制基础)
Android第三方ROM CyanogenMod源码下载、编译、刷机
七、总结:
本文结合作者自己的CyanogenMod源码编译折腾经验,介绍使用第三方开源系统定制个性化ROM的过程。满足相同需求的开发者不会像作者一样被折腾,或者折腾得更少,所以作者很满意。最后,虽然这篇博文经过作者多次验证,但难免会有疏漏。请纠正我。作者会尽快回复并纠正我。
暂无评论内容