![](/img/trans.png)
[英]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.