之前写了一个apk完成了OTA升级
一.应用层升级说明
大家知道android N已经是A/B升级模式,make otapackage之后就会生成update.zip升级文件
系统提供了UpdateEngine来完成这个升级:
UpdateEngine engine = new UpdateEngine();
mContext = context;
engine.bind(new UpdateEngineCallback(){
@Override
public void onStatusUpdate(int status, float percent){
SLog.i(TAG, "onStatusUpdate status = " + status + ", percent = " +
percent);
}
@Override
public void onPayloadApplicationComplete(int errorCode){
SLog.i(TAG, "onPayloadApplicationComplete errorCode = " + errorCode);
if(0 == errorCode){
reboot();
}
}
});
engine.applyPayload(url, offset, size, headerKeyValuePairs);
二.最近同事测试增量升级, 发现一些问题:
1.通过两次的make otapackage, 生成update文件之后, 无法生成增量包
执行命令:
/build/tools/releasetools/ota_from_target_files –v –-block -p out/host/
linux-x86 -k build/target/product/security/testkey -i
path_to_target_files_v1.zip path_to_target_files_v2.zip update.zip
报错如下:
执行: mmm external/bsdiff/ 之后解决这个问题
2.升级过程中system检验报错:
执行命令:
update_engine_client --update --follow --payload=file:///data/ota_package/update.zip --offset=45 --size=674344122 --headers="FILE_HASH=AVkwRr5bgVPJE3MDYUsrmMI1p0dYs5mK/Lo8JVwq/Ao=
FILE_SIZE=674344122
METADATA_HASH=Fyi0UPUbvcjTjsJPC7ixBceA9J/VDr7ehVRIidHK104=
METADATA_SIZE=86724
报错如下:
最后发现是同事修改了system的权限, 有remount操作导致.
总结, 遇到这个问题有2种情况:
a.out/target/product/msm9999/obj/PACKAGING/target_files_intermediates,解压.zip文件之后的system.img
和out/target/product/msm9999/里面的system.img不是同一个, 使用diff 比较一下即可发现
b.使用remount操作, 导致system改变了.
参考:Android OTA差分包升级失败_Ansen360的博客-CSDN博客
欢迎大家一起学习,讨论,微信公众账号