编译环境搭建
1. Ubuntu11.04 32位机器
2. JDK下载及环境变量配置
vim /etc/profile(我将环境变量都配到了/etc/profile里,下同)
在文件中export 。。。。
3. 下载Android SDK
因为编译源码时,会用到adb
下载Android SDK包,解压即可。
export PATH=${PATH}:<你sdk的目录>/tools
4. 安装需要的软件
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 pngcrush schedtool
CyanogenMod源码下载
1. Repo的安装
repo的安装比较方便,之需要下载一个文件,并设置成可执行权限,并添加到系统环境中去即可,具体命令如下:
创建目录:
cd ~
mkdir bin
配置环境变量:
export PATH=$PATH:~/bin
安装Repo
curl http://android.git.kernel.org/repo > ~/bin/repo
chmod a+x ~/bin/repo
2. 下载源码
a) 创建源代码目录:
cd ~
mkdir CyanogenMod
cd CyanogenMod
b) 在cyanogenmod目录执行repo命令,设定需要同步的源码内容:
repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
说明:网址即为cyanogenmod的地址,-b表示我们选择需要同步的分支,cyanogenmod有不少分支,比如dount,eclair, froyo,我们目前需要编译的是2.3,即gingerbread,则通过-b gingerbread来选择2.3的分支。
c) 在配置过程中,会让你选择名字和邮箱,这个会显示在你最后编译出来的rom
的基础信息里,可以选择你喜欢的来写
d) 配置完成后,就可以开始同步源码了:
repo sync -j16
e) 说明:这里说一下repo sync 这个过程那是相当的慢的。使用repo sync -jn,n表示同时打开的网络链接数,开启多个网络连接来下载,这样速度会有所提升的
编译环境的设置
1. 编译环境的建立
同步完源码后,首先需要建立编译环境,CM的源码把这些命令都写成了脚本,我们只需运行相应的脚本即可,首先,先cd到源码的根目录,然后执行如下命令:
./build/envsetup.sh
lunch cyanogen_generic-eng
2. 专属文件的提取(针对不同设备,本人只是刷了模拟器)
a) 虽然Android系统是开源的,但有部分Dream的专属文件是不开源的,所以并不包含在源码树中。但如果希望rom能在Dream真机上运行,又需要这些文件,所以需要将这些文件提取出来
b) 首先你要确保安装成功了上述所有软件,然后,将Dream通过usb连接到电脑上。
c) cd到源码的/vendor/htc/dream_sapphire目录,然后执行脚本:
./extract-files.sh
d) 这个操作会调用adb命令,从你的手机里pull所需要的专属文件到vendor目录。
3. 编译文件的修改(本人没进行此操作,直接全部编译)
a) 默认的编译过程包含了所有的语言和程序,但其实我们并不需要这些,可以通过编译文件的修改来定义需要输出的语言和软件
b) 打开/vendor/cyanogen/products 目录下的cyanogen.mk文件,里面定义了要输出的软件和语言,对于不需要的软件,可以直接删除。但不建议在这里修改,可以从最后的输出目录里删除不需要的,直接在这里改容易出错
c) 在文件的最后,有一行”PRODUCT_LOCALES”,这里就包含了rom支持的语言类型,默认有几十种,编译出来后,软件会比较大,一般我们只需要保留其中的常用语言即可,笔者选择保留了en_US,zh_CN和zh_TW这三种语言,编译出来的软件就小了很多。
CyanogenMod编译
源码的根目录,下执行
mka
重要:在编译前先执行make update-api,在执行mka进行编译,否则会报错,具体原因是CM中添加了新的API 。
编译结束后,在out/target/product目录下回出现三个镜像文件ramdisk.img system.img 和 userdata.img
若在该目录下执行
emulator -system system.img -data userdata.img -ramdisk ramdisk.img
模拟器启动会出现黑屏
重要:安装上述方法执行后,模拟器黑屏
解决办法:在CM源码中找到kernel-qemu-armv7,位置在~/prebuilt/android-arm/kernel/kernel-qemu-armv7
将它拷贝到镜像文件的相应目录,执行如下命令:
emulator -system system.img -data userdata.img -ramdisk ramdisk.img -kernel kernel-qemu-armv7