Когда приложение устанавливается магазином или установщиком, этот магазин или установщик считается «установщиком записи», то есть последним установившим приложение. До 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-файл список запрещённых пакетов. Включив пакет в этот список, ни один магазин или установщик не сможет запросить права владельца на обновление этого пакета.
Чтобы запретить обновление пакетов другим магазином или установщиком:
Включите следующее свойство в исходный файл
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
.
Установить права собственности на предустановленные приложения
Предустановленные приложения обычно не принадлежат конкретному установщику. Вместо этого предустановленным приложениям назначается новый владелец с помощью конфигурации системы, как показано в разделе «Варианты пакетов для обновления владельца» .