[高通MSM8953_64][Android10]解决制作差分包不生成system_manifest.xml的问题

文章目录

    • 开发平台基本信息
    • 问题描述
    • 解决方法

开发平台基本信息

芯片: MSM8953_64
版本: Android 10
kernel: msm-4.9

问题描述

设备在调试OTA升级功能的时候,制作OTA全量包测试升级功能,升级正常;然后,测试差分包升级失败了;以前差分包升级失败有以下几种可能:

  1. 签名不一致,例如固件编译用的是test key,而制作差分包用了release key
  2. 固件是直接用的out目录生成的文件制作的,正常是要用make dist生成的img的压缩文件中的system跟vendor两个镜像烧录的固件才能进行OTA升级

这两种坑都排除了,因为这个打包脚本我在其他平台上都用过很多了,肯定是没有问题的;只能把设备中recovery升级的日志导出来看一下,是哪里出问题了;日志保存路径cache/recovery/;将日志导出来可以看到日志报了Failed to verify package compatibility的错误,具体日志如下:

[ 12.872568] I:Verifying package compatibility...
[ 12.915551] W:Cannot fetch /system/etc/vintf/manifest.xml: Cannot open /mnt/system//system/etc/vintf/manifest.xml: No such file or directory
[ 12.917319] W:Cannot open /mnt/system//system/manifest.xml: No such file or directory
[ 12.919046] W:Cannot open /mnt/system//system/etc/vintf/: No such file or directory
[ 12.920785] W:Cannot open /mnt/system//system/compatibility_matrix.xml: No such file or directory
[ 12.932883] E:Cannot unmount / at /mnt/system: Invalid argument
[ 12.955553] E:Failed to verify package compatibility (result -19): No framework manifest file from device or from update package
[ 12.972096] E:No framework matrix file from device or from update package
[ 12.998578] W:failed to read uncrypt status: No such file or directory
[ 13.013025] W:Failed to read /sys/class/thermal/thermal_zone20/temp: Invalid argument
[ 13.027681] I:current maximum temperature: 51000
[ 13.028220] I:/sideload/package.zip

然后,我对比是全量包跟差分包,发现差分包的compatibility.zip中只有两个文件,而全量包有4个文件;
全量包:
[高通MSM8953_64][Android10]解决制作差分包不生成system_manifest.xml的问题_第1张图片

差分包:
[高通MSM8953_64][Android10]解决制作差分包不生成system_manifest.xml的问题_第2张图片

解决方法

造成差分包升级失败的原因就是compatibility.zip中少了两个system的文件;而导致少了两个system文件的原因就是两个target包中的版本号是相同,所以会导致制作差分包的时候过滤掉system一些文件。正常每次编译的版本号都是不同的,而我们这套代码是因为供应商改过BUILD_NUMBER,把它改成了固定值,从而导致了这个问题;将BUILD_NUMBER改为带时间即可,这样每次编译就都会改变。

--- a/build/make/core/version_defaults.mk
+++ b/build/make/core/version_defaults.mk
@@ -312,7 +312,7 @@ ifndef BUILD_NUMBER
   # If no BUILD_NUMBER is set, create a useful "I am an engineering build
   # from this date/time" value.  Make it start with a non-digit so that
   # anyone trying to parse it as an integer will probably get "0".
-  BUILD_NUMBER := SIM8950lhcB01V02_A10
+  BUILD_NUMBER := eng.$(shell $(DATE) +%Y%m%d.%H%M%S)
   HAS_BUILD_NUMBER := false
 endif
 .KATI_READONLY := BUILD_NUMBER HAS_BUILD_NUMBER

你可能感兴趣的:(Android10,SDM450,差分包,system_manifest,compatibility,Android10)