Когда приложение устанавливается магазином или установщиком, магазин или установщик считается «установщиком записи», то есть последним установщиком приложения. До 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
— это владелец пакета. Когда пакет выбирает обновление владельца, другие привилегированные магазины или установщики должны обрабатывать владельца обновления и получать согласие пользователя на обновление приложения.
Отказаться от пакетов при смене владельца
Вы можете заставить свой магазин или установщик отказаться от подмножества пакетов из изменений владельца обновления, предоставив denylist в APK. Включив пакет в этот список, ни один магазин или установщик не сможет запросить обновление владельца пакета.
Чтобы запретить обновление пакетов другим магазином или установщиком:
Включите следующее свойство в исходный файл
AndroidManifest.xml
магазина или установщика:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
В этом примере используется XML-список запрещенных объектов, называемый
legacyOwnershipDenylist
.Создайте список запрещенных адресов в виде необработанного 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
.
Установить право собственности на предварительно загруженные приложения
Предварительно загруженные приложения обычно не принадлежат конкретному установщику. Вместо этого предустановленным приложениям назначается новый владелец с помощью конфигурации системы, как показано в Opt packages in to update owner .