Как обновление AOSP OTA связано с обновлениями установленных системных приложений? - PullRequest
0 голосов
/ 15 декабря 2018

Это для пользовательского ПЗУ AOSP для устройства с пользовательским режимом киоска.В настоящее время у нас есть система, в которой главное приложение киоска в / system / priv-app может загружать и устанавливать свои обновленные APK-файлы с помощью PackageManager.Сейчас мы смотрим на реализацию OTA-обновлений, чтобы мы могли обновить остальную часть ОС.Мой вопрос: что произойдет, если мы используем оба типа обновлений?Т.е. приложение в режиме киоска загружает новое обновление и устанавливает обновленный APK в раздел данных, затем мы выпускаем OTA-обновление с более новой версией приложения.Будет ли Android автоматически удалять старое обновление из / data и возвращаться к более новой версии в / system / priv-app?Кроме того, что произойдет, если в обновлении OTA есть обновленное приложение, но оно все еще старше, чем последнее установленное обновление?

Причина не только использования обновлений OTA заключается в том, что некоторые из наших старых устройств не могут быть обновлены с помощью OTAпоэтому мы просто отправляем обновления приложений, поэтому в идеале мы можем продолжить один и тот же процесс для всех устройств, а затем при необходимости добавлять дополнительные OTA-обновления для более новых устройств.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

В этом случае PackageManagerService ищет лучшую версию, сравнивая код версии.После обновления OTA, если ваша система / priv-приложение имеет более высокую версию, чем версия данных / приложения, 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;
    ..........................................
    ..........................................
}

Проверили и нашли работу, как описано выше.

0 голосов
/ 21 декабря 2018

Кажется, что ответ таков: даже если OTA-обновление обновляет APK до более новой версии, PackageManager по-прежнему где-то кэширует исходный номер версии, поэтому считает, что версия на /system/priv-app является более старой.У меня не было возможности изучить его дальше, но кажется тем, что любые обновления, установленные на /data, всегда будут иметь приоритет, но только потому, что PackageManager не распознает, что версия /system/priv-appбыл обновлен обновлением OTA.

...