Android OTA升级的补救措施

问题场景如下:

       产品已经上市,由于销量太好了,某个硬件连二供都供应不上,没办法,只能用三供的硬件,但是之前量产版本的软件(软件A)不支持三供的硬件,所以为兼容三供硬件,需要出软件B,软件A和软件B版本号一样(为了使所有用户在表面上看拿到都是了一样的产品)。但是使用的三方OTA升级软件是通过软件版本号去区分版本的,现在软件A和软件B版本号一样,那么以后如果需要出售后版本C,如何使得软件A和软件B都能正常升级到软件C呢?


基本思路:

  1.  先认识两个很很重要的文件

   OTA升级包里面的\META-INF\com\google\android\updater-script 和 \META-INF\com\google\android\update-binary

   updater-script 是升级脚本,这个脚本指出了相关文件要更新到某个分区以及升级包和软件版本的匹配关系。update-binary 负责解析updater-script 脚本和执行升级动作。

  所以可以看到解析升级包和执行升级是不依赖于软件版本的,即使版本已经发布出去,我们还是可以修改代码使得升级过程按照我们希望的去做,然后重新编译得到update-binary 和 updater-script 。

 2. 有了前提(1),我们就可以实现把两个升级包合成一个,然后去升级。 


具体解决方法:

   1.  很显然,软件A已经发到用户手中,无法再去修改软件A。而在出软件B的时候,还是可以做些需要的改动的,因为它还在自己的控制中。首先需要做个标志,只得软件B能和软件A区分开,比如编译时间,一个属性值,只要在升级时能获取到就行。

    2. 做软件A 到软件C的差分包AC, 做软件B到软件C的差分包BC。

    3. 在 bootable\recovery\updater\updater.zip 中做相应修改,软件A升级时解析差分包AC的updater-script , 软件B升级时解析差分包BC的updater-script 。

    4. 重新编译出update-binary (编译完对应到obj\PACKAGING\target_files_intermediates\xxxtarget_files\OTA\bin\updater 文件)

    5. 把 AC 和 BC 两个差分包解压并合并到一起。AC的updater-script 文件里面需要修改成对应AC包的升级文件,BC的updater-script 文件里面需要修改成对应BC包的升级文件。用编译出来的update-binary 替换到整合包里。

    6. 重新打包AC和BC整合后的文件,KK 使用的命令是 zip -qry temp.zip ./*   ,  LL 上使用的命令是 zip -qry -n patch.dat temp.zip ./* .  LL 上patch.dat 为后缀的升级文件不能压缩,否则升级失败。

   7. 对整合包进行签名java -Xmx1024m -jar out/host/linux-x86/framework/signapk.jar -w android_keys/testkey.x509.pem   android_keys/testkey.pk8 temp/temp.zip update.zip

  8. 这样得到的update.zip 在软件A和软件B上就都能升级了。


    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值