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

Когда приложение устанавливается магазином или установщиком, этот магазин или установщик считается «зарегистрированным установщиком», то есть последним установщиком приложения. До 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 .

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

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