在新平台尝试制作差分包时报错,如下:
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积分):