资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
教 你 制 作 定 制 版 安 卓 系 统 ( Android ROM)有点玩机兴趣的 android 爱好者,应该对 custom ROM 这种东西都不陌生,它大致就相当于我们封装定制版 pc 系统中用到的 Ghost(*.gho)文件。在介绍 root 权限获取的时候,就直接用的 MoDaCo Custom ROM 作为例子。适用于 Hero 比较好的 ROM 还有不少,比如 Drizzys Custom HeroROM 等等,都可以在 XDA 上找到。肯定有不少朋友感到很好奇,这些 ROM 都是怎么做的。考虑到中文社区相关资料比较少,在这里抛砖引玉,大概原理介绍一下。对于第三方 ROM 来讲,通常都包括两部分,一个 recoveryimage,一个 update.zip。而大多数的第三方 ROM 的特色,就是加入了很多东西,比如 superuser 程序来获得 root 权限,busybox来扩充命令行下的功能,各种各样的配置文件或者小工具,比如默认打开中文 locale,等等。这些看似神奇的改动,都是在 update.zip 里面搞的,custom recoveryimage 的主要作用就是引导用户的操作,比如让你先备份,再应用 update.zip,再重启之类的操作。由于 custom recoveryimage 和 update.zip 的耦合性很小,所以不少 custom ROM 直接都用同一个 custom recoveryimage,这个好像是出自 MoDaCo 作者之手。再然后,我之前的文章已经有对 recoveryimage 的简单讲解,所以这里,我主要介绍一下 update.zip 的制作。如果我们直接把 MoDaCoROM 中的 update.zip 解包,我们会发现有一个 boot.img,一个 data文件夹,一个 system 文件夹,一个 META-INF 文件夹。这个 data 文件夹放的是 init.rc,而本来在系统中,init.rc 就是在 data 目录下的。当然,两者的作用不一样,这里的 init.rc 主要作用是开机执行你希望执行的命令,比如 MoDaCo 的 init.rc 就是 install busybox。而值得详细说明的,就是 system 文件夹。MoDaCoROM 版本的 system 下有一系列作者希望放到系统中的工具,对于 apk 文件,就放到 app 下,工具就放到 bin 和 xbin 下,依此类推。换句话说,system 或者 data 这个目录层次结构是取决于你自己的,你希望放的东西属于什么,应该运行在 online 系统的什么目录下,update.zip 里面就应该是有相应的目录路径,然后东西就放在里面。具体点,我们现在要依样画葫芦,搞一个新的 update.zip,那么第一步就是首先建立一个文件夹mkdir new-update好,假设我新 update.zip 的作用就是预装我自己的一个程序,my.apk,那么,我建立对应的子目录mkdir -p new-update/system/appcp my.apk !$这样,system 目录就完成了。但是这时,update.zip 的目录层次还没完,我们看 MoDaCoROM中的 update.zip 中有文件夹叫 META-INF,这个文件夹很关键,除了根目录下的三个文件外,里面层层目录,就包括了一个文件,叫 update-script,内容如下show_progress 0.1 0copy_dir PACKAGE:system SYSTEM:set_perm_recursive 0 0 0755 0644 SYSTEM:xbinset_perm_recursive 0 0 0755 0644 SYSTEM:sdset_perm 0 0 04755 SYSTEM:bin/suset_perm 0 0 04755 SYSTEM:bin/a2sdset_perm 0 0 04755 SYSTEM:xbin/busyboxcopy_dir PACKAGE:data DATA:show_progress 0.2 0format BOOT:write_raw_image PACKAGE:boot.img BOOT:show_progress 0.2 10这里面的内容,大部分是针对你要做的修改设置的。比如copy_dir PACKAGE:system SYSTEM:就是把 system 中新增的工具拷贝到手机上,然后set_perm_recursive 0 0 0755 0644 SYSTEM:xbinset_perm_recursive 0 0 0755 0644 SYSTEM:sdset_perm 0 0 04755 SYSTEM:bin/suset_perm 0 0 04755 SYSTEM:bin/a2sdset_perm 0 0 04755 SYSTEM:xbin/busybox就是设置 MoDaCo ROM 中新增程序的权限,然后copy_dir PACKAGE:data DATA:把 data 下的内容(就是那个 init.rc)复制到手机上,然后format BOOT:write_raw_image PACKAGE:boot.img BOOT:刷 boot 分区。那我们这里没有这么多新增的东西,应该怎么写呢?copy_dir PACKAGE:system SYSTEM:set_perm_recursive 0 0 04755 SYSTEM:app/my.apk就可以了。你当然还可以做一些别的事情,比如加一个 FORMAT DATA 之类的_开个玩笑,千万别这个干,不然你的数据就全没了。好,那么也就是说,我们要在自己的 new-update 目录下也建一个/META-INF/com/google/ 目录,然后把新的 update-script 扔进去。完了么?差一点。其实如果你没有别的需求了,那么就完了,可以把下面这一小块跳过。下面这一小块,是关于 boot.img 的。在如何修改 Android 系统的 Ramdisk 以及 boot 镜像文章中,我们谈到,如果刷 boot 镜像有问题,就要用别的方法让系统 boot 我们自己的 bootimage 了,这个别的方法,自然就是用 update.zip 了。MoDaCoROM 版本的 update.zip 也包括了一个boot.img,但是如果我们有出于各种需求自己修改的 boot.img,自然就可以替换掉原来的了。当然注意,如果加了 boot.img,那么 update-script 里面就不能漏掉write_raw_image PACKAGE:boot.img BOOT:这句。好,到现在,我们的 new-update 目录下有/system/app/my.apk/META-INF/com/google/update-script/META-INF/MANIFEST.MF/META-INF/CERT.SF/META-INF/CERT.RSAboot.img恩,那么就进入打包阶段。你可能会问,这有什么难的,直接 zip 一下不就得了。如果要是这么简单就好了,你打包后,必须把你的内容都 sign 一下,得到相应的 cert,才能在 fastboot模式中被承认并成功刷机。在 sign 你的文件之前,先做这么几件事打包。进入 update 文件夹, zip update.zip xxx xxxx xxxx xxxxxxxx。什么意思呢,就是只把你需要的文件打包,不要用./*作为参数。而且相对路径最好是在 update 下面,不要在外面用zipupdate.zip ./update/*这种命令打包去 sun 网站下载最新的 jre下载这个文件 testsign一定要用 JRE1.6.0.16 或者更高,我知道这个有点恶心,但是提供下载的 testsigh.jar 就是按照这个版本或者更高编译的,你用老版本就运行不了。好,下下来以后,执行这个命令/jre1.6.0_16/bin/java -classpath testsign_path/testsign.jar testsign update.zip update-signed.zip稍微讲解一下,java 程序是最新 jre 下的,testsign_path 是你放 testsign.jar 的地方,建议放到 sdk 的 tool 目录下。update 是待 sign 文件,update-signed 是指定的生成文件名。sign 执行完后,用 unzip -l 看,会发现/META-INF/MANIFEST.MF/META-INF/CERT.SF/META-INF/CERT.RSA三个文件的日期属性变了。我怀疑就是重新生成了这三个文件。但如果之前打包时候不包括这三个文件,sign 完又不会新生成。因为不管大局,所以我就没有仔细研究,有清楚的朋友恳请赐教。好了,现在,把你自己的 update.zip 放到 sd 卡上,在 fastboot 下通过 recovery image 引导,执行 update.zip,然后就享受你自己的修改成果吧:)最后提醒一句,任何类似的操作之前,都把自己的手机做好备份。此方法仅供参考,我不对任何因此造成的破坏负责,嘿嘿。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号