HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例

前言:

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编译生成的固件,如下图:

图片[1]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

图片[2]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

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]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

(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]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

(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。

图片[5]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

(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文件夹,如图:

图片[6]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

点击htc文件夹进入,发现liberty静静躺在那里,如图:

图片[7]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

四、编译源码

1、读取手机上的一些私有配置文件

htc手机连接ubuntu系统,可能没有usb访问权限,请参考2.4配置USB访问权限

$cd  ~/CyanogenMod/android/CM-7/device/htc/liberty
$./extract-files.sh

图片[8]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

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,显示信息如下图:

图片[9]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

编译成功后显示如下信息。这张照片来之不易。半夜起来截图:

图片[10]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

4、编译可能产生的错误分析(如果没有问题可以直接跳过,执行第5步:生成flash zip包操作):

错误原因:无法访问文件:zip 文件损坏

错误原因分析:没有选择正确的jar版本。默认选择/usr/bin/fastjar自动模式,通过sudo update-alternatives –config jar可以选择jdk6。

图片[11]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

问题解决:

32位ubuntu编译android2.3,无法访问java.lang.Object问题

编译android时出错2.3.4

5、制作flash zip包。

在CyanogenMod/android/CM-7目录下执行如下脚本:

$./vendor/cyanogen/tools/squisher

固件包生成成功,显示如下图信息:

图片[12]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

五、闪光

我刷了cm-7-20131119-UNOFFCIAL-liberty.zip包到我的htc手机,一切正常,有图有真相,注意“关于手机”修改选项,就是刷机包cm-7-20131119-UNOFFCIAL-liberty.zip。

图片[13]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

图片[14]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

图片[15]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

图片[16]-HTCAria(liberty)下载、编译Cyanogenmod7、并生成固件烧写到手机为例-唐朝资源网

六、参考:

Android扩展系列(5)–CyanogenMod源码下载编译(Android ROM定制基础)

Android第三方ROM CyanogenMod源码下载、编译、刷机

七、总结:

本文结合作者自己的CyanogenMod源码编译折腾经验,介绍使用第三方开源系统定制个性化ROM的过程。满足相同需求的开发者不会像作者一样被折腾,或者折腾得更少,所以作者很满意。最后,虽然这篇博文经过作者多次验证,但难免会有疏漏。请纠正我。作者会尽快回复并纠正我。

© 版权声明
THE END
喜欢就支持一下吧
点赞133赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容