android 源码编译报错 imgdiff,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

排查应用后发现是因为so文件,导致差分包生成报错

我是采用以apk的形式内置应用到系统的,so文件是直接集成到apk里的,没有导出来使用Android.mk引用,因为这样也没报错,谁想差分包生成会出问题。

既然是因为so文件导致报错,那就导出so文件

解压apk so文件都是放在lib 目录下的

38f9f909dcecb7927d55d751b182d20a.png1a15e37dbf83d6fa9e56fcaa7876944c.png

将整个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

Android OTA(Over-The-Air)升级是指通过无线网络(如Wi-Fi或移动数据网络)下载和安装设备的新软件版本。OTA更新可以让用户更加方便地获得软件更新,而不必手动下载和安装更新。 在 Android 中,OTA 更新是通过 OTA 更新实现的。OTA 更新是一个 ZIP 文件,其中含设备的完整系统映像。当设备收到更新通知时,系统会下载OTA 更新并在后台安装它。因为OTA 更新是非常大的,因此通常会提供差分,这些差分含新软件版本与旧软件版本之间的差异。 以下是Android OTA更新源码路径: - OTA更新系统框架代码:frameworks/base/services/core/java/com/android/server/ota/ - OTA更新应用代码:packages/apps/Updates/ 以下是Android OTA差分生成方法: - 使用repo 工具下载AOSP源代码,repo init 后,repo sync -j4 - 进入AOSP源代码根目录,执行 make otapackage 命令,如果想要加快编译速度,可以使用make -j4 otapackage 命令,其中 4 表示使用4个线程进行编译。 - 编译完成后,在 out/target/product/{device}/ 目录中会生成 OTA 更新,其中 {device} 表示设备名称。 如果需要生成差分,可以使用以下命令: ``` ./build/tools/releasetools/ota_from_target_files -k path_to_keys \ --block --backup=true target_files.zip fullota.zip ``` 其中,path_to_keys 是签名密钥的路径,target_files.zip 是完整的系统映像文件,fullota.zip 是已安装的旧版本系统映像文件。执行这个命令后,会生成一个差分,可以用于OTA升级。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值