AOSP OTA-使用较新版本更新系统应用程序不会覆盖以前安装的,较旧的APK更新

时间:2019-08-23 01:26:08

标签: android android-source android-rom

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

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

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

2 个答案:

答案 0 :(得分:1)

Android sourcecode for PackageManagerService具有以下几行:

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”文件中找到指纹值。因此,您可以检查是否是问题所在。

答案 1 :(得分:0)

请确保较新版本的系统应用具有比旧的现有版本代码更高的版本代码。

PackageManagerService通过比较版本代码来寻找更好的版本。在OTA更新后,如果您的系统/专用应用程序的版本高于数据/应用程序的版本,则系统/专用应用程序将优先。