转载一个哥们的教程,内容我作了必定修正,供本身和你们查阅:html
原本想下载Android官方源代码,没想到android.git.kernel.org维护,不能访问,很是遗憾,并所以还郁闷了几天。
后来转投MIUI,没找到它的源码,不知道它的"超过40万人社区开发团队"是什么意思,求解具体开发人员几何,都是谁?
后来一想,居然忘记了CyanogenMod这茬,这但是的的确确的开源啊,个人手机一直也在用CyanogenMod系统的,感受确实不错。java
1.准备
我得环境以下,
vmware work 8
Ubuntu11.10 (64位)
下载CyanogenMod的gingerbread分支
Ubuntu的环境配置你们能够参考我前面写的《Android拓展系列(3)--Android源码下载》,也能够参考http://source.android.com/。
这里着重说下Android 2.3以上须要借助JAVA6,安装Java6,我推荐以下安装:android
4 |
$ sudo apt- get install sun-java6-jdk |
其中第二句可能会出错,不过不要紧,跳过便可。 git
2.安装repo
由于android.git官方已经不能访问,因此我这里提供一个repo文件的下载地址,免的你们处处搜索:http://115.com/file/cl15goo2#repo
把repo拷贝到ubuntu根目录下得bin下
操做方法:github
5 |
$alias repo= "~/bin/repo" |
6 |
//这里我用特地用别名,你们也能够按常规方法把repo的路径添加到PATH中 $export PATH=~/bin:$PATH 我添加的内容 3.ubuntu中环境的配置shell JDK前面已经说了,其余的软件列表以下:ubuntu |
1 |
$sudo apt- get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool |
这些软件都安装好以后咱们开始下载CyanogenMod源码。服务器
4.下载CyanogenMod源码网络
2 |
//建立CyanogenMod文件夹来放置后面全部的代码 |
3 |
$mkdir CyanogenMod 我添加的内容,这里要CD CyanogenMod进去,也就是变动工做目录,如此可让源代码下载到本身想存储的地方 |
5 |
$repo init -u git: //github.com/CyanogenMod/android.git -b gingerbread |
6 |
//同步服务器代码到本地,-j16据网友反应是多开网络链接,从而能提升下载速度 |
7 |
$repo sync -j16 我添加的内容,以上的一切,均须要SUDO -S 得到超权,或者命令以前加sudo,不然会提示没权限 |
这个过程很是的漫长,你们慢慢的等吧,本人是晚上睡觉的时候下载,次日早上醒来就Done了。app
5.编译源码
在CyanogenMod/device目录下有不少款手机的对应版本:

里面有个htc,本人是htc G9,也就是Liberty,咱们点击看看:

个人liberty静静的优雅的舒服的躺在那里。
因此本人决定编译一个我手头上的liberty对应的系统版本,编译完成后咱们直接刷机。
第一步:读取手机上的一些私有配置文件
1 |
$cd CyanogenMod/device/htc/liberty |
图示以下:

第二步:生成编译脚本文件
1 |
$cd ~/CyanogenMod/vendor/cyanogen |
3 |
$./extract-google-files |
4 |
//复制编译脚本文件到CyanogenMod目录下,后面编译整个系统用的就是这个文件 |
5 |
$cp ~/CyanogenMod/vendor/cyanogen/products/cyanogen_lieberty.mk ~/CyanogenMod/buildspec.mk |
贴上进行时图片:

第三步:编译脚本
回到CyanogenMod目录下,执行脚本。
2 |
$source build/envsetup.sh |
4 |
//这个命令须要一小会儿时间,可是又没提示,耐性等待一下 |
5 |
$lunch cyanogen_liberty-eng |
7 |
$make -j4 CYANOGEN_WITH_GOOGLE= true otapackage |
这个过程也是至关的漫长,还好通常状况下咱们只是第一次须要项目整个编译,后面只须要编译某个模块。
惋惜完成的时候我忘记截图了,惋惜不能上图了。
在编译的过程当中,咱们有一点要特别注意,虚拟机的内存不要过小,本人刚开始分配虚拟机512M内存,一下子就出错,从新编译又一下子出错,如此重复,并且还致使某个文件被破坏掉了(values-cs/strings.xml中某行少一个右尖括号,这个我百思不得其解),后来我把虚拟机内存调到1024M就一直编译经过了。
第四步:生产刷机zip包。
1 |
./vendor/cyanogen/tools/squisher |
有图为赏:

用这个zip包,我刷到我手机上,一切正常。
6.定制ROM
有了以上的环境后,咱们就能够大展手脚,深度定制ROM, 作本身的操做系统,本身的CyanogenMod,本身的MIUI,本身的Android系统。
举个最简单的例子:
咱们换一下默认menu菜单的选中背景图,咱们进入CyanogenMod/frameworks/base/core/res/res/mdpi目录下(由于htc liberty的分辨率是480x320),找到图片highlight_pressed.png,替换为绿色的背景:

那么修改资源文件后,咱们须要从新编译framework-res.apk:
05 |
//进入CyanogenMod目录,并初始化脚本文件 |
07 |
$source build/envsetup.h |
09 |
$lunch cyanogen_liberty-eng |
10 |
//进入资源编译目录(或者它的子目录也能够) |
11 |
$cd frameworks/ base /core/res |
12 |
//开始编译framework-res.apk |
编译完成,示意图以下:

在CyanogenMod/out/target/product/liberty/system/framework目录下生成了一个framework-res.apk文件,就是咱们修改Menu选中项图片后新打的资源包。
如今咱们须要把这个资源包更新到手机中。
USB连上手机后,一切正常的话(adb固然也是事前要装好的哦),打开终端:
4 |
$adb push ~/CyanogenMod/ out /target/product/liberty/system/framework/framework-res.apk /system/framework/ |
重启后,进入桌面,咱们点击Menu,选择一项:

修改资源包,能够修改样式,显示图片,调整布局等等。
你也能够直接修改framework代码,在framework/base/core/java目录下,修改对应的类,好比逻辑处理,样式重绘等等,而后同上面相似编译,把生成的framework.jar替换掉手机的/system/framework下的framework.jar,重启手机便可看到效果。
你也能够添加系统应用,删除系统应用等等,这里特别提到一点,系统应用能够经过以下命令删除(具备root权限):
有了这些基础知识,我相信咱们后面的深度定制ROM必定很是精彩!
7.小结 本文以CyanogenMod源码编译总结了Android改造系统的一个基本环境,是咱们以后ROM系统定制,优化的基础,是android深刻学习的必会技能,特此分享,共勉!