Android 手机自制 ROM 的方法
有点玩机兴趣的 android 爱好者,应该对 custom ROM 这种东西都不陌生。我介绍 root
权限获取的时候,就直接用的 MoDaCo Custom ROM 作为例子。适用于 Hero 比较好的
ROM 还有不少,比如 Drizzy’s Custom Hero ROM 等等,都可以在 XDA 上找到。肯定
有不少朋友感到很好奇,这些 ROM 都是怎么做的。考虑到中文社区相关资料比较少,在
这里抛砖引玉,大概原理介绍一下。
对于第三方 ROM 来讲,通常都包括两部分,一个 recovery image,一个 update.zip。
而大多数的第三方 ROM 的特色,就是加入了很多东西,比如 superuser 程序来获得 root
权限,busybox 来扩充命令行下的功能,各种各样的配置文件或者小工具,比如默认打开
中文 locale,等等。这些看似神奇的改动,都是在 update.zip 里面搞的, custom
recovery image 的 主 要 作 用 就 是 引 导 用 户 的 操 作 , 比 如 让 你 先 备 份 , 再 应 用
update.zip,再重启之类的操作。由于 custom recovery image 和 update.zip 的耦合
性很小,所以不少 custom ROM 直接都用同一个 custom recovery image,这个好像
是出自 MoDaCo 作者之手。再然后,我之前的文章已经有对 recovery image 的简单讲
解,所以这里,我主要介绍一下 update.zip 的制作。
如果我们直接把 MoDaCo ROM 中的 update.zip 解包,我们会发现有一个 boot.img,
一个 data 文件夹,一个 system 文件夹,一个 META-INF 文件夹。这个 data 文件夹放的
是 init.rc,而本来在系统中,init.rc 就是在 data 目录下的。当然,两者的作用不一样,
这里的 init.rc 主要作用是开机执行你希望执行的命令,比如 MoDaCo 的 init.rc 就是
install busybox。
而值得详细说明的,就是 system 文件夹。MoDaCo ROM 版本的 system 下有一系列作
者希望放到系统中的工具,对于 apk 文件,就放到 app 下,工具就放到 bin 和 xbin 下,
依此类推。换句话说,system 或者 data 这个目录层次结构是取决于你自己的,你希望放
的东西属于什么,应该运行在 online 系统的什么目录下,update.zip 里面就应该是有相
应的目录路径,然后东西就放在里面。
具体点,我们现在要依样画葫芦,搞一个新的 update.zip,那么第一步就是首先建立一个
文件夹
mkdir new-update
好,假设我新 update.zip 的作用就是预装我自己的一个程序,my.apk,那么,我建立对
应的子目录
mkdir -p new-update/system/app
cp my.apk !$
这样,system 目录就完成了。但是这时, update.zip 的目录层次还没完,我们看
MoDaCo ROM 中的 update.zip 中有文件夹叫 META-INF,这个文件夹很关键,除了根
目录下的三个文件外,里面层层目录,就包括了一个文件,叫 update-script,内容如下