android7.1 OTA增量升級流程及問題

之前寫了一個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改變了.

參考:https://blog.csdn.net/qq_25804863/article/details/80538248

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章