前言:

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。

             CM Support: 7Latest CM version:     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

Ubuntu 12.04安装编译所需要的包详细请参考: http://source.android.com/source/initializing.html

4、 配置USB访问权限

(1)、默认将htc类型手机通过usb连接上电脑之后,使用adb devices是没有权限访问手机设备的,如下图所示:

tip:这里要使用到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)、详细请参考:

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

repo命令使用参考: http://source.android.com/source/using-repo.html

特别提醒:关于gingerbread分支,我下载之后,发现CyanogenMod/android/CM-7/device目录里没有htc、三星一系列手机对应的版本,折腾了好长一段时间,最终选择gingerbread-release分支下载源码,在CyanogenMod/android/CM-7/device目录成功获得多款手机对应的版本。

下载成功后,在CyanogenMod/android/CM-7/device文件夹会包含如下所示文件夹,以此判断源码是否下载完整。发现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步:生成刷机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目录下执行如下脚本:

$./vendor/cyanogen/tools/squisher

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

五、刷机

将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

【Android ROM定制】CyanogenMod源码下载和编译相关推荐

  1. Android 4.0.1 源码下载,编译和运行

    [牛人分享]Android 4.0.1 源码下载,编译和运行 转自 http://blog.csdn.net/rambo2188/article/details/6943382 ----------- ...

  2. Android 第三方ROM CyanogenMod 源码下载,编译,刷机

    转自: http://blog.csdn.net/androiddevelop/article/details/8661120 一. 背景介绍 当前文章是记录自己HTC G12下载,编译,刷入手机   ...

  3. android源码下载以及编译自己的ROM

    android源码下载以及编译自己的ROM 最近发现kernel.org被墙了,为什么这种网站也能被墙了? 要想下载源码的话,只能绕过去了.下面是我从网上搜索到的一些下载方法: =========== ...

  4. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:http://item.jd.com/12212640.html 试读地址:http:/ ...

  5. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:item.jd.com/12212640.ht- 试读地址:www.epubit.com ...

  6. VLC for Android源码下载和编译

    Project Hosting on 点击打开链接 最受欢迎的开源项目 点击打开链接 由Android的核心开发团队提供了15个优秀的示例项 目,包含了游戏.图像处理.时间显示.开始菜单快捷方式等. ...

  7. Android AOSP和Android-X86源码下载编译终极普法

        Android AOSP和Android-X86源码下载编译终极普法 引言   最近有朋友在询问怎么下载Android AOSP源码和Android-X86源码,编译学习!其实这个说简单也简单 ...

  8. Android12 源码下载、编译、刷机、单编调试Framework

    文章目录 说明 1. 代码下载 1.1 下载Repo工具 1.2 安装和配置Git 1.3 创建工程目录 1.4 初始化Repo仓库 1.5 同步代码 2. 驱动下载 2.1 下载对应机型的驱动 2. ...

  9. WebRTC 开发(二)源码下载与编译

    转载:http://depthlove.github.io/2019/05/02/webrtc-development-2-source-code-download-and-build/ 在使用任何工 ...

  10. SELinux零知识学习六、swig源码下载、编译和安装

    接前一篇文章:SELinux零知识学习五.libcap-ng源码下载.编译和安装 在前篇文章中编译libcap-ng源码时,出现了如下错误: swig -o capng_wrap.c -python ...

最新文章

  1. 【超级大转载】常用的D3D变换相关函数
  2. windows 系统下多网卡绑定/绑定配置
  3. 开始食用grpc(之一)
  4. 【Java】函数式编程思想-Lambda表达式
  5. 零基础,快速安装dedeCMS 搭建网站 - 总结大全
  6. 【嵌入式Linux】嵌入式Linux应用开发基础知识之网络通信
  7. undefined与null
  8. Mock以及Mockito的使用
  9. flex实现最后一个元素居右
  10. 看云计算时代的web1800远程服务支持系统
  11. 锐捷DHCPV6配置
  12. python识别手写数字knn_手写数字识别以及Python sklearn KNN实现
  13. 简单的html练习:实现超好看唯美浪漫的文字边框卡片
  14. 小米用户画像_华为小米OPPOvivo用户画像,用户兴趣爱好各有不同!还有一大相同点!...
  15. python跳一跳编程构造_Python玩“跳一跳” iOS+Win 硬件实现
  16. 人均劳动生产率的计算方法_劳动生产率计算公式
  17. 使用OpenSSL库接口,实现AES CBC加密,基于X509 base64编码证书的RSA非对称加密例子
  18. 技术期刊 · 白日照耀开鸿蒙 | 深入鸿蒙 ACE UI 框架解析;无限循环的 useEffect 类型;用 Three.js 实现 3D 房间;图神经网络入门;超基础的机器学习入门-原理篇
  19. 阿里云的认证费用是多少?考试要多长时间?
  20. RTX 4070TI和RTX 3090TI性能哪个好 RTX 4070ti和RTX3090ti 差距

热门文章

  1. 软考信息系统项目管理师考试论文写作技巧
  2. 服务器本地存储文件,云服务器存储放在本地
  3. 记一次云主机如何挂载对象存储
  4. 【云原生 | 21】Docker运行Web服务实战之Apache
  5. 移动安全-移动App漏洞检测平台
  6. [转]库存那些事儿_4_收货
  7. APS车间排产软件实现企业生产数据可视化
  8. Shell中IF大于等于小于
  9. 智遥工作流调用SAP基础数据,解决方案
  10. Excel实现数据项校验的功能---VBA的编写以及数据有效性的设置