Android9.0 制作差分包报错

博客介绍了在使用特定命令生成OTA差分包时遇到的错误,包括Zip文件偏移量不正确的问题。提出了两种解决方案:1) 检查并修改Android.mk文件,确保so文件被正确引入;2) 修改系统源码blockimgdiff.py以改变差异包生成方式。但修改源码可能导致差分包增大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题现象:

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

./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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值