Android9.0 制作差分包报错

问题现象:

在使用以下命令进行生成差分包时:

./build/tools/releasetools/ota_from_target_files -v -i target_files-eng.old.zip -p out/host/linux-x86/ -k build/target/product/security/testkey target_files-eng.new.zip different-update.zip

出现报错:

ERROR:
Failed to generate imgdiff for //system/app/Self-checkout-stage/Self-checkout-stage.apk: tgt=71816-80383, src=210875-219214:
W/ziparchive( 5568): Zip: bad offsets (dir 33937192, size 258284, eocd 34158612)
imgdiff E 12-12 19:40:03  5568  5568 imgdiff.cpp:661] Failed to open zip file /tmp/src-PdsyF4: Invalid offset

方法1:

以apk的形式内置应用到系统的,so文件是直接集成到apk里的,没有导出来使用Android.mk引用,导致制作差分包报错;
1> 解压apk so文件都是放在lib 目录下的;
2> 将整个lib导出来,跟apk放在同一级目录;

在这里插入图片描述
3> 修改Android.mk :

JNI_LIBS :=
$(foreach FILE,$(shell find $(LOCAL_PATH)/lib/ -name *.so), $(eval JNI_LIBS += $(FILE)))
LOCAL_PREBUILT_JNI_LIBS := $(subst $(LOCAL_PATH),,$(JNI_LIBS))
//lib下直接存放.so文件即可。

4> 这里的so是64位的,如果系统是64 so只有32位的话 还需要加:

LOCAL_MULTILIB := 32 //指定编译32bit

以上办法还是不能解决问题的话,就是第三方apk库的问题,可以尝试使用方法2修改源码blockimgdiff.py文件


方法2:

如果第三方apk改不好,就需要修改系统源码blockimgdiff.py文件( 主要修改了对比方式,这样修改的话会让差异包变大):

diff --git a/build/make/tools/releasetools/blockimgdiff.py b/build/make/tools/releasetools/blockimgdiff.py
index 24c5b2de7f..1be27279ba 100644
--- a/build/make/tools/releasetools/blockimgdiff.py
++ b/build/make/tools/releasetools/blockimgdiff.py
@ -433,6 +433,9 @ class BlockImageDiff(object):
Returns:
A boolean result.
"""
+ return False //注意缩进,不然会编译报错!
+
if self.disable_imgdiff or not self.FileTypeSupportedByImgdiff(name):
return False

猜你喜欢

转载自blog.csdn.net/weixin_45639314/article/details/128389465