Настройка и управление владением обновлениями для приложений,Настройка и управление владением обновлениями для приложений.

Когда приложение устанавливается магазином или установщиком, магазин или установщик считается «зарегистрированным установщиком», то есть последним установщиком приложения. До версии Android 14 Android позволял другому магазину или установщику приложения стать зарегистрированным установщиком и обновлять приложение без уведомления пользователя.

В Android 14 первоначальный установщик приложения может объявить себя «владельцем обновления» и иметь собственные обновления для приложения. Если другой установщик попытается обновить приложение, пользователю предоставляется возможность одобрить новое обновление, прежде чем оно будет продолжено.

Включить пакеты для обновления владельца

Чтобы объявить, что пакет приложения принадлежит магазину или установщику, включите тег update-ownership в XML- sysconfig для каждого пакета следующим образом:

<update-ownership package="com.example.application" installer="com.example.installer" />

В этом примере com.example.application — это пакет приложения, которым вы будете владеть, а com.example.installer — владелец пакета. Если для пакета выбрано обновление владельца, другие привилегированные магазины или установщики должны обработать владельца обновления и получить согласие пользователя на обновление приложения.

Отказаться от изменения владельца пакетов

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

Чтобы запретить обновление пакетов другим магазином или установщиком:

  1. Включите следующее свойство в исходный файл AndroidManifest.xml магазина или установщика:

    <application …>
      <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST"
                android:resource="@xml/legacyOwnershipDenylist" />
    </application>
    

    Этот пример ссылается на список запретов XML, называемый legacyOwnershipDenylist .

  2. Создайте список запретов как необработанный XML-ресурс следующего формата:

    <deny-ownership>com.example.app1</deny-ownership>
    <deny-ownership>com.example.app2</deny-ownership>
    

Если магазин или установщик запрашивает право собственности на пакет в списке запретов, право собственности не будет предоставлено, и пакет все равно будет установлен, но не будет принадлежать ни одному установщику. Кроме того, независимо от установщика, приложение в списке запрещенных не может принадлежать кому-либо.

Набор пакетов в этом списке может измениться посредством обновления APK-файла установщика, который предоставляет этот список. Любое право собственности, установленное для пакета, который впоследствии вносится в список запрещенных, удаляется при обновлении установщика. Таким образом, последующие обновления пакета приложения в списке запрещенных не потребуют взаимодействия с пользователем.

Обработка владельца обновления и получение согласия пользователя

В Android 14, даже если у установщика магазина или приложения есть разрешение android.permission.INSTALL_PACKAGES , ему все равно необходимо обрабатывать состояние STATUS_PENDING_USER_ACTION , если он хочет обновить приложение, обновления которого принадлежат другому магазину или установщику.

Пример приложения InstallAPKSessionApi.java также показывает, как обрабатывать STATUS_PENDING_USER_ACTION .

Установить право собственности на предварительно загруженные приложения

Предварительно загруженные приложения обычно не принадлежат конкретному установщику. Вместо этого предварительно загруженным приложениям назначается новый владелец с использованием конфигурации системы, как показано в разделе «Выбор пакетов для обновления владельца» .