1

我们为机顶盒管理我们自己的基于 AOSP 的固件。

当我们使用更新版本的系统应用程序创建新的 OTA 固件时。较新版本的系统应用程序不会覆盖安装在 /data 中的旧版本。

是否有任何安装后脚本或其他方法来执行此操作?

4

2 回答 2

1

请确保较新版本的系统应用程序的版本代码高于现有的旧版本代码。

PackageManagerService 通过比较版本代码来寻找更好的版本。OTA 更新后,如果您的 system/priv-app 版本高于 data/app 版本,system/priv-app 将优先。

于 2019-08-27T10:17:28.217 回答
1

PackageManagerService 的 Android 源代码有以下几行:

mIsUpgrade = !Build.FINGERPRINT.equals(ver.fingerprint);
... some other code

if (mIsUpgrade && !onlyCore) {
                Slog.i(TAG, "Build fingerprint changed; clearing code caches");
                ... cache clearing logic
                ver.fingerprint = Build.FINGERPRINT;
}

也就是说,如果构建指纹更改,代码缓存将被清除。未清除的缓存意味着您的应用程序的包信息看起来相同(版本信息、标志等)。

可能会出现此问题,因为您的 OTA 软件包与安装它的系统具有相同的指纹。

检查您的 makefile 并确保您为每个构建生成唯一的指纹。

指纹值可以在“system/buildprops”文件中找到。因此,您可以检查是否是问题所在。

于 2020-04-24T19:41:28.863 回答