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"文件中找到。所以你可以检查是否是问题所在。
我们为机顶盒管理我们自己的基于 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"文件中找到。所以你可以检查是否是问题所在。