Android OTA包重新签名的方法

       做这个研究的初衷说来惭愧,与OTA后台接口之间存在个bug,即终端获取MD5值的时候,如果首位是0,会被自动舍去,导致版本校验不过,这个概率是1/16. 怎么办呢,就想到了手动直接改一下OTA版本,避免了整机重编译,要知道Android 整编是很耗时间的。

方法:

1,将OTA升级包重新压缩,并随便添加一个小文件,比如添加version.txt.

Android OTA包重新签名的方法

 

2,在Android根目录下重新签名,使用如下命令(标红处可选)注意其中文件路径会有不同:

java -Xmx1024m -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/testkey.x509.pem build/target/product/security/testkey.pk8 ../920/update_signed.zip ../920/sign/update_signed.zip

3,打包生成的zip文件即为重新签名后的OTA升级包文件。

如果手动修改过OTA升级包,不重新进行签名,使用BeyondConpare工具比较是无差别的,如下,但是仍然无法通过系统的校验进行升级。

Android OTA包重新签名的方法

修改了内容,重新签名以后,签名文件会跟原来的有所不同,是否说明签名文件的目录中有对当前包中的内容的时间或者列表等的描述??这时候是能够通过系统的验证的,如下。

Android OTA包重新签名的方法

 

自测步骤:

1,使用原生设置:设置-》设备-》关于-》System Local update,版本验证通过,能够启动升级。

2,升级成功以后,验证基本功能正常。Launcher轮播,CIBN高清影视视频播放,爱奇艺播放正常。

3,升级成功以后,再次通过System Local update 升级正常的OTA升级包,能够验证通过并正常升级。升级以后基本功能正常。

参考文献:

https://source.android.google.cn/devices/tech/ota/sign_builds.html

https://blog.****.net/mu0206mu/article/details/7399822