为只更新手机的一部分内容,而直接替换system中的文件,或想将app安装系统应用,可采用recovery模式下刷入update.zip包的方式实现这些需求。
这样生成的更新包相对于完整的刷机包来说不仅小很多,而且能更加快捷的修改手机中的文件或应用程序。
0x01 update包的组成
update.zip主要由两个文件夹组成,META-INF文件夹和system文件夹。
META-INF文件夹中包含签名的三个文件,以及刷机脚本update-script和从官方rom中提取的update-binary文件。
system文件夹中包含app文件夹,或framework文件夹。当需要刷入系统应用时,将应用程序放在system/app/目录下;更新core.odex文件或core.jar文件时,则放在system/framework/目录下。
每次修改更新包之后,都需要重新签名,相关的三个签名文件也会相应的被更改。
0x2 刷机脚本文件修改注意事项
由于只是更新系统中的部分文件,因此删除掉了完整刷机脚本中对system分区格式化的语句,保留了装载system分区的语句,以及释放刷机包中system目录文件到手机/system目录的语句:
format("ext4", "EMMC", "/dev/block/mmcblk0p43", "0");
mount("ext4", "EMMC", "/dev/block/mmcblk0p43", "/system");
package_extract_dir("system", "/system");
同时,删除了更新内核镜像文件boot.img的语句:
assert(package_extract_file("boot.img", "/tmp/boot.img"),
write_raw_image("/tmp/boot.img", "/dev/block/mmcblk0p40"),
delete("/tmp/boot.img"));
其它部分内容基本没做修改。需要注意的是,如果删除了set_perm或set_perm_recursive等相关权限设置的语句,可能会导致系统相关功能出现异常,因此建议不要删除这些内容。
0x3 刷机包的重新签名与刷入
根据需求在system的相应目录下放置好文件之后,如:
或
使用APKSign或其它工具对刷机包进行刷机即可。如果手机recovery模式下的sdcard和一般使用的不同时,建议在recovery模式下再将刷机包push进去。