Android OTA系统降级

此方案基于6.0版本降级到5.1版本实现,其他版本降级仅供参考。

客户本身5.1版本ota整包升级到了6.0版本,因为升级后测试出bug,但fota已经发布,取消发布后已有很多终端机器升级到了6.0版本,并且收到客诉。因为无法短期内解决这个bug,要采取降级方式回退到5.1系统,以免用户继续投诉。

Tip:大版本升级或者降级都需要整包升级,并且需要重新签名。低系统版本升级到高系统版本,需要将高版本整包使用低系统签名文件签名。降级反之。

要明确,Android机制是不允许系统降级的。

方案:

  1. 首先编译出6.0, 5.1版本的ota整包。(这一部分应该是之前5.1升级到6.0时编译完ota保留的)
  2. 在6.0整包中修改:
  • full_K5-ota-android6.0-1691675028.zip\META-INF\com\android\metadata
-    post-build=alps/full_K5/K5:6.0/MRA58K/1691673617:userdebug/test-keys
-    post-timestamp=1691673782
pre-device=K5
  • full_K5-ota-android6.0-1691675028.zip\META-INF\com\google\android\updater-script
-    ui_print("Target: alps/full_K5/K5:6.0/MRA58K/1691673617:userdebug/test-keys");
show_progress(0.750000, 0);
ui_print("Patching system image unconditionally...");
block_image_update("/dev/block/platform/mtk-msdc.0/11120000.msdc0/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat");
-    ui_print("Verifying the updated system image...");
-    if range_sha1("/dev/block/platform/mtk-msdc.0/11120000.msdc0/by-name/system", "42,0,32767,32768,32770,32865,32867,33379,65535,65536,65538,98304,98306,98401,98403,98915,131071,131072,131074,163840,163842,163937,163939,164451,190059,196608,196610,229376,229378,229473,229475,229987,262143,262144,262146,294912,294914,295009,295011,327680,327682,360448,360450") == "2b9cfad16feb4d4635e11f9fd286f8a6bce63fc4" then
-    if range_sha1("/dev/block/platform/mtk-msdc.0/11120000.msdc0/by-name/system", "56,32767,32768,32770,32865,32867,33379,65535,65536,65538,66050,97792,98304,98306,98401,98403,98915,131071,131072,131074,131586,163328,163840,163842,163937,163939,164451,190059,190571,196096,196608,196610,197122,228864,229376,229378,229473,229475,229987,262143,262144,262146,262658,294400,294912,294914,295009,295011,295523,327168,327680,327682,328194,359936,360448,360450,360962") == "0d1d76135a43547c983799e39a0cda54c89ebfff" then
-    ui_print("Verified the updated system image.");
-    else
-    abort("system partition has unexpected non-zero contents after OTA update");
-    endif;
-    else
-    abort("system partition has unexpected contents after OTA update");
-    endif;
show_progress(0.050000, 5);
package_extract_file("boot.img", "/dev/block/platform/mtk-msdc.0/11120000.msdc0/by-name/boot");
show_progress(0.200000, 10);
apply_sig(package_extract_file("sig/boot.sig"), "/dev/block/platform/mtk-msdc.0/11120000.msdc0/by-name/boot");
show_mtupdate_stage("/cache/recovery/last_mtupdate_stage");
delete("/cache/recovery/last_mtupdate_stage");
  • 取5.1整包中的system.transfer.list boot.img system.new.dat三个文件替换到6.0整包中。

此时使用修改后的整包签名后降级应该能够成功,但是开机后可能会反复重启。这是因为userdata/emmc分区中保留了6.0的数据,此时需要格式化emmc分区,操作如下

  • ota升级时格式化data分区
    full_5_NEW-format.zip\META-INF\com\google\android\updater-script
show_progress(0.750000, 0);
ui_print("Patching system image unconditionally...");
block_image_update("/dev/block/platform/mtk-msdc.0/11120000.msdc0/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat");
show_progress(0.050000, 5);
package_extract_file("boot.img", "/dev/block/platform/mtk-msdc.0/11120000.msdc0/by-name/boot");
show_progress(0.200000, 10);
apply_sig(package_extract_file("sig/boot.sig"), "/dev/block/platform/mtk-msdc.0/11120000.msdc0/by-name/boot");
show_mtupdate_stage("/cache/recovery/last_mtupdate_stage");
+    ui_print("Erasing user data...");
+    format("ext4", "EMMC", "/dev/block/platform/mtk-msdc.0/11120000.msdc0/by-name/userdata", "0", "/data");
delete("/cache/recovery/last_mtupdate_stage");
  1. 重新签名
    Tip:因为是6.0降级到5.1所以使用6.0签名文件签名。
  • 取6.0版本编译完ota后的target-files-package.zip 解压。
  • 将制作完成后的降级包放到解压后的目录下。
  • 运行命令
java -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/testkey.x509.pem  build/target/product/security/testkey.pk8  fullxx.zip fullxx_sign.zip
  • 最后使用签名后的ota包本地升级测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值