`

【Android ROM定制】CyanogenMod源码下载和编译

 
阅读更多

转自:http://blog.csdn.net/andie_guo/article/details/16879443

参考:http://www.cnblogs.com/loulijun/archive/2012/02/22/2361533.html

前言:

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。

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. CM Support: 7  
  2. Latest 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

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"  
  2. $ sudo apt-get update  
  3. $ sudo apt-get installsun-java6-jdk  

3、 安装编译所需要的包 (Ubuntu 10.04-- 11.10)

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. $ sudo apt-get installgit-core gnupg flex bison gperf build-essential \  
  2.   zip curl zlib1g-dev libc6-devlib32ncurses5-dev ia32-libs \  
  3.   x11proto-core-dev libx11-devlib32readline5-dev lib32z-dev \  
  4.   libgl1-mesa-dev g++-multilib mingw32 tofrodospython-markdown \  
  5.   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设备:

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. ubuntu@andy-laptop:~$lsusb  

htc 手机对应的usb设备信息如下:

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. Bus 002 Device 004: ID 0bb4:0c92 High Tech Computer Corp.  

如下图所示:

(3)、修改51-android.rules文件:

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. ubuntu@andy-laptop:sudo gedit /etc/udev/rules.d/51-android.rules  

添加一行信息,特别注意,ATTR{idVendor} 与ATTR{idProduct}的值分别于ID 0bb4:0c92对应。

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. # fastboot protocol onmanta (htc liberty)  
  2. 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

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. //从用户根目录开始  
  2. $ mkdir ~/bin  
  3. $ PATH=~/bin:$PATH  
  4. $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo  
  5. $ 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执行下载

 

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. //从用户根目录下开始,分别创建文件夹CyanogenMod/android/CM-7  
  2. $cd ./CyanogenMod/android/CM-7  
  3. //获取gingerbread-release的分支源代码  
  4. $repo init -u git://github.com/CyanogenMod/android.git -b gingerbread-release   
  5. //同步服务器代码到本地,-j16据网友反应是多开网络连接,从而能提高下载速度  
  6. $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访问权限

 

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. $cd  ~/CyanogenMod/android/CM-7/device/htc/liberty  
  2. $./extract-files.sh  

2、  生成编译脚本文件

 

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. $cd ~/CyanogenMod/android/CM-7/vendor/cyanogen  
  2. $./get-rommanager  
  3. $./extract-google-files  
  4. //复制编译脚本文件到目录下,后面编译整个系统用的就是这个文件  
  5. $cp ~/CyanogenMod/android/CM-7/vendor/cyanogen/products/cyanogen_lieberty.mk  ~/CyanogenMod/android/CM-7/buildspec.mk  

 

执行./get-rommanager运行结果如图所示:

 

3、  编译脚本

回到CyanogenMod/android/CM-7目录下,执行脚本。

 

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. //初始化脚本,这个是后面的重要基础步骤  
  2. $cd ~/CyanogenMod/android/CM-7  
  3. $source build/envsetup.sh  
  4. //选择编译的产品,这个命令需要一小会儿时间,但是又没提示,耐性等待一下  
  5. //或直接执行lunch命令,查看list选项来选择执行哪个版本  
  6. $lunch cyanogen_liberty-eng  
  7. //开始编译  
  8. $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目录下执行如下脚本:

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. $./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 资料

    在Android世界中,编译源码意味着从原始代码构建操作系统,这一过程对于开发者来说是深入理解Android系统工作原理的关键步骤。对于HTC One M7这款设备,用户和开发者经常寻求编译ROM,以获取更新的功能、优化性能...

    android源码下载

    Android源码下载是Android开发人员深入理解系统工作原理和进行定制化开发的重要步骤。源码提供了Android操作系统的底层实现,包括Linux内核、HAL层、框架层以及应用程序接口。了解如何下载Android源码对于开发者来说...

    android2.2源码下载

    本文将深入探讨Android 2.2源码的相关知识点,包括其下载、解压、编译以及如何利用这些源码进行学习和开发。 一、源码下载 Android 2.2的源码可通过Google的Android Open Source Project (AOSP) 官方仓库获取。...

    android4.4源码下载

    在本篇文章中,我们将探讨如何下载和使用Android 4.4的源代码,以及如何将其与Eclipse集成,以便于开发和学习。 1. **获取源代码**: 下载Android 4.4源码的首选方法是使用Git,这是一个分布式版本控制系统。你...

    Android 源码编译过程

    1. 初始化Repo并克隆CyanogenMod源码: ```bash repo init -u git://github.com/CyanogenMod/android.git -b froyo repo sync ``` 如果你想编译Eclair版本,将`froyo`替换为`eclair-ds`,但请注意,当前...

    android源码开发实战19.18.zip

    2. 开发自定义ROM:完全基于源码开发新的Android ROM,如CyanogenMod,提供了丰富的个性化选项和性能优化。 3. 硬件驱动开发:针对特定硬件,编写或修改驱动程序,使Android系统更好地适配硬件。 五、性能优化 源码...

    android源码开发实战9.05.zip

    13. **自定义ROM开发**:基于源码创建自己的Android ROM,如CyanogenMod、LineageOS等,实现个性化定制和功能增强。 14. **Android框架扩展**:例如,修改或添加新的Intent、BroadcastReceiver、Service等,以实现...

    android源码开发实战11.11.zip

    在Android源码开发实战中,11.11章节可能涉及了Android系统深层次的理解和定制。这个压缩包可能包含了一系列的教程、代码示例或项目文件,帮助开发者深入理解Android系统的内部工作原理,并掌握源码级别的开发技能。...

    传播Android源码

    使用源码编译的命令如"source build/envsetup.sh"和"make -j8"。同时,源码还支持GDB等调试工具进行系统级调试。 10. **自定义ROM开发** 基于Android源码,开发者可以创建自定义ROM,比如CyanogenMod、LineageOS等...

    supersupro_supersupro官网_supersupro_小米MAX3官网ROM下载地址_源码.zip

    ROM在这里指的是Read-Only Memory的简称,但在手机和计算机领域,它常用来指代手机的操作系统镜像,可以包含Android等系统的完整安装包。"官网"表明这是官方提供的资源,可能是该团队或开发者维护的官方网站,用户...

    如何将Android2.1源码移植到自己的手机.doc

    首先,你需要搭建一个Android源码编译环境,这通常包括安装必要的软件工具,如Java JDK、Git、Linux发行版(如Ubuntu)、Android SDK和NDK等。同时,手机需要开启USB调试模式,以便通过ADB(Android Debug Bridge)...

    安卓Android源码——挨踢Club.zip

    例如,许多第三方 ROM(如CyanogenMod)就是基于安卓源码定制的。 10. 安全性分析 源码分析有助于开发者识别和修复潜在的安全漏洞,提高应用的安全性。例如,源码中关于权限控制、数据加密和隐私保护的实现,都是...

    android源码开发实战16.05.zip

    6. **Android Studio与源码构建**:学习使用Android Studio进行源码构建,包括Repo工具的使用、源码下载、编译环境配置、修改和编译源码。 7. **调试技巧**:学会使用adb、logcat、systrace等工具进行源码级别的...

    Android源码

    9. **自定义ROM**:熟悉源码后,开发者可以创建自定义ROM,如CyanogenMod,为设备带来独特的特性和性能优化。 10. **性能优化**:通过查看源码,开发者可以找到系统瓶颈,优化应用程序性能,提升用户体验。 11. **...

    Android Pie 源码

    - **CyanogenMod/LineageOS**:基于AOSP的著名第三方ROM,通过源码修改可创建个性化的Android系统。 - **Modifications**:可以添加新功能,优化性能,甚至移除预装应用。 6. **应用开发**: - **Android Studio...

    Android源码4.1

    这涉及到对源码的编译、修改和打包等多个步骤。社区中有很多流行的自定义ROM项目,如CyanogenMod(现已更名为LineageOS),它们都是基于官方发布的源码进行二次开发而来。 ### 总结 通过对Android 4.1源码的学习,...

    android源码开发实战12.04.zip

    在Android源码开发实战12.04的资料中,我们可以深入探讨Android系统的内部运作机制,以及如何基于源代码进行定制和优化。Android系统是开源的,这为开发者提供了无尽的可能性,从底层驱动到上层应用,都可以进行深度...

    如何编译CWM Recovery

    【编译CWM Recovery】是Android系统中一个重要的自定义恢复环境的过程,它涉及到对源码的处理和编译,以便生成适用于特定设备的恢复镜像。CWM,全称ClockworkMod Recovery,是一个功能丰富的第三方恢复程序,允许...

    cm10.1编译

    CM,全称为CyanogenMod,是一个基于Android开源项目的第三方操作系统,它提供了许多原生Android系统没有的功能和定制选项。CM10.1是CM系列的一个版本,基于Android 4.2(Jelly Bean)系统,它旨在为用户提供更纯净、...

    android-18 sources

    总的来说,Android 18源码的探索和研究对于开发者来说是一次深入学习Android系统的机会,它涵盖了操作系统的核心组件、应用程序框架和设备驱动,为定制、优化和创新提供了无限可能。通过理解并修改源码,开发者能够...

Global site tag (gtag.js) - Google Analytics