Android9.0制作差分包报错

812 阅读1分钟

在新平台尝试制作差分包时报错,如下:

ERROR:
Failed to generate imgdiff for //system/priv-app/Test/Test.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

参考 blog.csdn.net/yxdspirit/a…
对Android.mk进行修改,同时删除apk内的so。

结果生成的整包烧录后没有这个应用,猜测是因为apk是签名过的,删除so后,影响了完整性,导致应用无法被安装。

尝试2

尝试上述博客中 qq_36071820 的评论,去掉blockimgdiff.py中对large apks的拆分.

#参考Android8.0源码,注视掉了下面这部分拆分代码。
 # Split large APKs with imgdiff, if possible. We're intentionally checking
 # file types one more time (CanUseImgdiff() checks that as well), before
 # calling the costly RangeSha1()s.
 if (self.FileTypeSupportedByImgdiff(tgt_name) and
 self.tgt.RangeSha1(tgt_ranges) != self.src.RangeSha1(src_ranges)):
 if self.CanUseImgdiff(tgt_name, tgt_ranges, src_ranges, True):
 large_apks.append((tgt_name, src_name, tgt_ranges, src_ranges))
 return

结果依然报错。

最后解决

感谢@qq_36071820 大佬提供的帮助。

修改源码的build/tools/releasetools/blockimgdiff.py

在imgdiff算法报错时,使用bsdiff算法去对apk做差分。

修改后的blockimgdiff.py文件如下(0积分):

download.csdn.net/download/zo…