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

AOSP OTA - Updating system apps with newer version does not override previously installed, older apk updates

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

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

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

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

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

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"文件中找到。所以你可以检查是否是问题所在。