天天看点

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,感兴趣的可以下载参考下