[英]AOSP OTA - Updating system apps with newer version does not override previously installed, older apk updates
[英]How does an AOSP OTA update deal with installed system app updates?
这适用于自定义信息亭模式设备的自定义AOSP ROM。 目前我们有一个系统,其中/ system / priv-app中的主要kiosk应用程序可以使用PackageManager下载并安装自己更新的APK。 我们现在正在考虑实施OTA更新,以便我们可以实际更新操作系统的其余部分。 我的问题是如果我们使用这两种类型的更新会发生什么? 即,自助服务终端模式应用程序下载自身的新更新并将更新的APK安装到数据分区,然后我们发布具有更新版本的应用程序的OTA更新。 Android会自动从/ data删除旧更新并恢复到/ system / priv-app中现在更新的版本吗? 此外,如果OTA更新具有更新的应用程序但仍然比安装的最新更新更旧,会发生什么?
不专门使用OTA更新的原因是我们的某些旧设备无法使用OTA进行更新,因此我们只是推送应用程序更新,因此理想情况下,我们可以继续为所有设备执行相同的过程,然后为此推送额外的OTA更新需要时更新的设备。
在这种情况下,PackageManagerService通过比较版本代码来查找更好的版本。 在OTA更新后,如果您的system / priv-app的版本高于数据/应用程序版本,则system / priv-app将优先使用。
代码参考: http : //aosp.opersys.com/xref/android-8.0.0_r36/xref/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java#8887
代码段:
if (pkg.mVersionCode <= ps.versionCode) {
// The system package has been updated and the code path does not match
// Ignore entry. Skip it.
if (DEBUG_INSTALL) Slog.i(TAG, "Package " + ps.name + " at " + scanFile
+ " ignored: updated version " + ps.versionCode
+ " better than this " + pkg.mVersionCode);
if (!updatedPkg.codePath.equals(scanFile)) {
Slog.w(PackageManagerService.TAG, "Code path for hidden system pkg "
+ ps.name + " changing from " + updatedPkg.codePathString
+ " to " + scanFile);
updatedPkg.codePath = scanFile;
updatedPkg.codePathString = scanFile.toString();
updatedPkg.resourcePath = scanFile;
updatedPkg.resourcePathString = scanFile.toString();
}
updatedPkg.pkg = pkg;
updatedPkg.versionCode = pkg.mVersionCode;
..........................................
..........................................
}
检查并发现如上所述的工作。
答案似乎是,即使OTA更新将APK更新为较新版本,PackageManager仍然将原始版本号缓存在某处,因此认为/system/priv-app
上的版本是旧版本。 我没有机会进一步研究它,但似乎安装到/data
任何更新将始终优先,但仅因为PackageManager无法识别/system/priv-app
版本已被更新OTA更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.