转自: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。
- CM Support: 7
- 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
- $ 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世界中,编译源码意味着从原始代码构建操作系统,这一过程对于开发者来说是深入理解Android系统工作原理的关键步骤。对于HTC One M7这款设备,用户和开发者经常寻求编译ROM,以获取更新的功能、优化性能...
Android源码下载是Android开发人员深入理解系统工作原理和进行定制化开发的重要步骤。源码提供了Android操作系统的底层实现,包括Linux内核、HAL层、框架层以及应用程序接口。了解如何下载Android源码对于开发者来说...
本文将深入探讨Android 2.2源码的相关知识点,包括其下载、解压、编译以及如何利用这些源码进行学习和开发。 一、源码下载 Android 2.2的源码可通过Google的Android Open Source Project (AOSP) 官方仓库获取。...
在本篇文章中,我们将探讨如何下载和使用Android 4.4的源代码,以及如何将其与Eclipse集成,以便于开发和学习。 1. **获取源代码**: 下载Android 4.4源码的首选方法是使用Git,这是一个分布式版本控制系统。你...
1. 初始化Repo并克隆CyanogenMod源码: ```bash repo init -u git://github.com/CyanogenMod/android.git -b froyo repo sync ``` 如果你想编译Eclair版本,将`froyo`替换为`eclair-ds`,但请注意,当前...
2. 开发自定义ROM:完全基于源码开发新的Android ROM,如CyanogenMod,提供了丰富的个性化选项和性能优化。 3. 硬件驱动开发:针对特定硬件,编写或修改驱动程序,使Android系统更好地适配硬件。 五、性能优化 源码...
13. **自定义ROM开发**:基于源码创建自己的Android ROM,如CyanogenMod、LineageOS等,实现个性化定制和功能增强。 14. **Android框架扩展**:例如,修改或添加新的Intent、BroadcastReceiver、Service等,以实现...
在Android源码开发实战中,11.11章节可能涉及了Android系统深层次的理解和定制。这个压缩包可能包含了一系列的教程、代码示例或项目文件,帮助开发者深入理解Android系统的内部工作原理,并掌握源码级别的开发技能。...
使用源码编译的命令如"source build/envsetup.sh"和"make -j8"。同时,源码还支持GDB等调试工具进行系统级调试。 10. **自定义ROM开发** 基于Android源码,开发者可以创建自定义ROM,比如CyanogenMod、LineageOS等...
ROM在这里指的是Read-Only Memory的简称,但在手机和计算机领域,它常用来指代手机的操作系统镜像,可以包含Android等系统的完整安装包。"官网"表明这是官方提供的资源,可能是该团队或开发者维护的官方网站,用户...
首先,你需要搭建一个Android源码编译环境,这通常包括安装必要的软件工具,如Java JDK、Git、Linux发行版(如Ubuntu)、Android SDK和NDK等。同时,手机需要开启USB调试模式,以便通过ADB(Android Debug Bridge)...
例如,许多第三方 ROM(如CyanogenMod)就是基于安卓源码定制的。 10. 安全性分析 源码分析有助于开发者识别和修复潜在的安全漏洞,提高应用的安全性。例如,源码中关于权限控制、数据加密和隐私保护的实现,都是...
6. **Android Studio与源码构建**:学习使用Android Studio进行源码构建,包括Repo工具的使用、源码下载、编译环境配置、修改和编译源码。 7. **调试技巧**:学会使用adb、logcat、systrace等工具进行源码级别的...
9. **自定义ROM**:熟悉源码后,开发者可以创建自定义ROM,如CyanogenMod,为设备带来独特的特性和性能优化。 10. **性能优化**:通过查看源码,开发者可以找到系统瓶颈,优化应用程序性能,提升用户体验。 11. **...
- **CyanogenMod/LineageOS**:基于AOSP的著名第三方ROM,通过源码修改可创建个性化的Android系统。 - **Modifications**:可以添加新功能,优化性能,甚至移除预装应用。 6. **应用开发**: - **Android Studio...
这涉及到对源码的编译、修改和打包等多个步骤。社区中有很多流行的自定义ROM项目,如CyanogenMod(现已更名为LineageOS),它们都是基于官方发布的源码进行二次开发而来。 ### 总结 通过对Android 4.1源码的学习,...
在Android源码开发实战12.04的资料中,我们可以深入探讨Android系统的内部运作机制,以及如何基于源代码进行定制和优化。Android系统是开源的,这为开发者提供了无尽的可能性,从底层驱动到上层应用,都可以进行深度...
【编译CWM Recovery】是Android系统中一个重要的自定义恢复环境的过程,它涉及到对源码的处理和编译,以便生成适用于特定设备的恢复镜像。CWM,全称ClockworkMod Recovery,是一个功能丰富的第三方恢复程序,允许...
CM,全称为CyanogenMod,是一个基于Android开源项目的第三方操作系统,它提供了许多原生Android系统没有的功能和定制选项。CM10.1是CM系列的一个版本,基于Android 4.2(Jelly Bean)系统,它旨在为用户提供更纯净、...
总的来说,Android 18源码的探索和研究对于开发者来说是一次深入学习Android系统的机会,它涵盖了操作系统的核心组件、应用程序框架和设备驱动,为定制、优化和创新提供了无限可能。通过理解并修改源码,开发者能够...