天天看點

OTA生成差分包内置應用報錯

ota做差分包的時候遇到個問題,生成差分包在内置應用做差分的時候會報錯

ERROR:

Failed to generate imgdiff for //system/priv-app/TestApp_1/TestApp_1.apk: tgt=70499-75692 75694-75930, src=70499-71112:

W/ziparchive(25145): Zip: bad offsets (dir 22384640, size 53154, eocd 22245282)

imgdiff E 07-14 14:21:25 25145 25145 imgdiff.cpp:661] Failed to open zip file /tmp/tgt-KxNSNW: Invalid offset

方式1:

排查應用後發現是因為so檔案,導緻差分包生成報錯

我是采用以apk的形式内置應用到系統的,so檔案是直接內建到apk裡的,沒有導出來使用Android.mk引用,因為這樣也沒報錯,誰想差分包生成會出問題。

既然是因為so檔案導緻報錯,那就導出so檔案

解壓apk so檔案都是放在lib 目錄下的

OTA生成差分包内置應用報錯
OTA生成差分包内置應用報錯

将整個lib導出來,跟apk放同一級目錄,然後删除apk裡的lib目錄。

修改Android.mk 增加

LOCAL_PREBUILT_JNI_LIBS :=

lib/arm64-v8a/libnative-lib.so

lib/arm64-v8a/libopencv_java3.so

我的so檔案是隻要用64位的,如果系統是64 so隻有32位的話 還需要加

LOCAL_MULTILIB := 32 指定編譯32bit

20210907 備注

此前調查該問題的時候發現是差分腳本問題,對這種apk檔案進行diff的時候 zip報錯,具體什麼原因沒深入調查,當時考慮過換zip指令,可是要改很多,是以放棄了。臨時采用了上述方式。

後來搞Android Q,最近突然考慮到這個問題,是以嘗試用Android Q的OTA 腳本做Android P的差分包,原本用Android P的OTA差分腳本不行的,用Android Q的OTA 腳本竟然可以生成ota包。

相關代碼上傳資源了https://download.csdn.net/download/yxdspirit/22003075,感興趣的可以下載下傳參考下