最近的工作总算告一段落,Fix Bug的闲暇继续总结,继续分享,继续闲扯。^_^
话说前一段时间有幸开发了一款叫刀锋的机器。蓦然回首,真是百感交集啊。所以,今天决定结合这段神奇的经历讲述我们底包预处理。
OK,现在开始。我猜你的第一个问题是“为什么要预处理底包?”
HTC的ROMER回答说:“我需要DEODEX,这样才能用APKTOOL进行反汇编,开始植入我们的JAVA 汇编代码。”
华为的ROMER如是说:“我需要打开BOOT.IMG中的Debug开关和ADB服务,这样才能在启动过程中调试ROM。”
刀锋的ROMER听完前面二位的回答,留下了一句:“你们太幸福了”,然后直接泪奔了。
相信做过刀锋移植的同学看完上面的对白后,应该深有体会的。没做过的也不要紧,我这里解释一下。一般预处理底包需要进行如下几方面的工作:
1.获取移植机器的ROOT权限
2.安装第三方Recovery
3.提取移植机器BOOT分区和SYSTEM分区
4.制作原厂ROM的卡刷包,并对其进行DEODEX处理
以上四步视不同的机器,略有不同,但总体上基本差不多。下面解释一下他们之间的关系。
首先,获取ROOT权限是后面几步的基础,这就好比做一桌美食需要准备各种原料一样。说的具体点,没有ROOT权限,你根本无法操作BOOT和SYSTEM分区,也就无法制作原厂ROM的卡刷包。而对于刀锋来说,更进一步 —— 无法安装Recovery,这基本等于对ROMER说:“哥们,回家洗洗睡吧。”其他机型的ROMER此时表态了:“不会吧,有那么夸张吗?”好吧,这就献上我的亲身经历。
记得刚拿到刀锋新机时,深深被他的造型和传说中的“背部披风”所打动。于是,我便怀着无比激动的心情,开始寻找底包。我找呀,找呀,终于发现那事的刀锋4.0.4只有OTA包,必须从2.3.6升级。同时,获取ROOT的方法也必须伴随OTA进行。如果你不幸的激动了一把,直接OTA了,刀锋如是说“对不起,你无法ROOT了”。见此状况,我冷静的分析了一下,那是否可以刷回2.3.6,再OTA和ROOT呢?MOTO跳出来说:“对不起,你在做梦吧,我们有BL保护机制的,你是无法降级的!”我顿时陷入了沉思,一筹莫展。这个状态持续了很久。就在我快放弃的时候,MIUI的粉丝们来了—— MOTO的BL是可以解锁的:方法一“换CPU”,方法二“买开发机”。听到这些消息后,我心情豁然开了,于是我们几经辗转后终于找到了一台“开发机”,解锁了BL,保证了后续开发。这里继续想广大刀锋的MIUI粉丝们表示感谢,感谢你们点点滴滴的帮助和鼓励。^_^
刀锋的插曲先讲到这,现在回到获取ROOT权限上来。一般ROOT权限分为,内核ROOT和SHELL ROOT。内核ROOT即通过修改BOOT.IMG来获取,方法可以参见MIUI适配官方教程的“修改 boot.img”章节。SHELL ROOT即通过/system/bin/su来获取ROOT的方法。就开发来讲,内核ROOT较为方便,但前提是你可以修改BOOT.IMG。因为原厂ROM的BOOT.IMG是签过名的,如果不能解锁BOOT LOADER,换句话说不能去掉原厂BOOT LOADER验证BOOT.IMG签名的机制,你修改了BOOT.IMG也是没有用的,因为你根本无法将修改过的BOOT.IMG刷入手机。SHELL ROOT的方法每个机型都不太相同,但目前总的方法都是想办法将/data/local.prop中ro.kernel.qmenu临时改为1,使ADB获取ROOT,进而植入su程序。具体的分析请参见我转载的另一篇文章。
其次,说一下为什么需要安装第三方Recovery。一般刚出厂的机器都是有Recovery的,但是那个Recovery只认官方的更新包,具体的说就是只能刷具有官方签名的包。所以安装第三方Recovery就是为了绕过验证签名这一步,当然第三方的Recovery还有好多强大的功能,方便各位机油刷机。
原理大致如上,现在联系一下实际——刀锋闪亮登场。一般厂商Reocvery的镜像都是可以通过fastboot直接刷写的,个别机型例如:HTC解锁BOOT LOADER后,也是可以方便的刷写的。但是刀锋就是不一样,MOTO如是说:“想更新Recovery分区?必须经过我的签名认证”。OMG,直接断了我们更新Recovery分区的想法。不过 ,网友是强大,发现了刀锋有一个preinstall分区,于是可以将第三方Recovery放到那里,并通过特殊命令进入。但是这给OTA造成了困难,因为adb reboot recovery命令直接进入官方的Recovery,MIUI的OTA包根本不能刷。无奈之下,我们重新修改了Recovery,同时调整了系统OTA的实现才完整支持了OTA。总结一下这个过程:“折腾!折腾!折腾!”
最后,解释一下最后两步。这两步本质上就是构造一个完整的卡刷包。目前Android系统的卡刷包主要是更新BOOT分区和SYSTEM分区,所以我们需要提取其中的内容。另外,大部分厂商都对APK文件进行了优化——ODEX,这种优化可以提高系统的启动速度,但是无法使用APKTOOL进行反汇编,所以我们需要对提取的ODEX文件进行逆向工程——DEODEX。为我们的插庄做好准备。
好了,今天先说到这里,换个角度总结一下:
1.给你的手机配一把钥匙——获取ROOT权限
2.拿这把钥匙去开门——安装第三方Recovery
3.开门进入你的手机,参观你的手机,并拍照留念
——提取移植机器BOOT分区和SYSTEM分区,DEODEX,制作卡刷包
祝大家开心。