【问题标题】:How does an AOSP OTA update deal with installed system app updates?AOSP OTA 更新如何处理已安装的系统应用更新?
【发布时间】:2018-12-14 22:56:28
【问题描述】:

这是用于自定义信息亭模式设备的自定义 AOSP ROM。目前,我们有一个系统,其中 /system/priv-app 中的主 kiosk 应用程序可以使用 PackageManager 下载和安装自身更新的 APK。我们现在正在考虑实施 OTA 更新,以便我们可以真正更新操作系统的其余部分。我的问题是如果我们同时使用这两种更新会发生什么? IE。 kiosk 模式应用程序会下载自身的新更新并将更新的 APK 安装到数据分区,然后我们会发布具有更新版本应用程序的 OTA 更新。 Android 会自动从 /data 中删除旧更新并在 /system/priv-app 中恢复到现在较新的版本吗?此外,如果 OTA 更新有更新的应用,但仍然比安装的最新更新旧,会发生什么情况?

不完全使用 OTA 更新的原因是我们的一些旧设备无法使用 OTA 更新,所以我们只推送应用更新,因此理想情况下,我们可以对所有设备继续使用相同的流程,然后推送额外的 OTA需要时为较新的设备进行更新。

【问题讨论】:

    标签: android android-source


    【解决方案1】:

    在这种情况下,PackageManagerService 通过比较版本代码来寻找更好的版本。 OTA更新后,如果您的system/priv-app版本高于data/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

    代码sn-p:

    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;
        ..........................................
        ..........................................
    }
    

    已检查并发现按上述说明工作。

    【讨论】:

      【解决方案2】:

      答案似乎是,即使 OTA 更新将 APK 更新到较新的版本,PackageManager 仍将原始版本号缓存在某处,因此认为 /system/priv-app 上的版本是较旧的版本。我没有机会进一步研究它,但 似乎 安装到 /data 的任何更新将始终具有优先权,但这只是因为 PackageManager 无法识别 /system/priv-app版本已被 OTA 更新更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多