Относительно того, является ли это ожидаемым поведением в Android Q: эта проблема не воспроизводится в эмуляторе Android Q. Думаю, это считается базовым.
Подробнее о технических деталях:
Логика разрешений во время выполнения в Android в основном находится в PackageManagerService
(в основном бухгалтерский учет для каждого пакета) и ActivityManagerService
(в основном логика разрешений во время выполнения запроса)
Когда пакет удаляется, метод очистки данных removePackageDataLIF вызывается. Он отвечает за очистку всего, включая разрешения приложений. Эта логика не изменила Android Q.
Информация о разрешениях хранится в каталоге системных данных, а не в каталоге приложения, поэтому резервное копирование данных приложения также не влияет на него.
Но остается вопрос: как такое могло произойти?
Одним из возможных объяснений может быть флаг PackageManager.DELETE_KEEP_DATA
Вы можете легко удалить пакет, сохранив его каталог данных после удаления:
$ adb shell cmd package uninstall -k your.app.id
(-k для хранения данных)
Теперь, чтобы проверить, сохраняются ли разрешения вместе с каталогом данных:
$ adb root && adb shell cat /data/system/users/0/runtime-permissions.xml | grep your.app.id -A 10
(для этой команды требуется отлаживаемая сборка прошивки телефона)
Глядя на источник removePackageDataLIF и попробовав его на моем пикселе с отлаживаемой прошивкой, разрешение приложения сохраняется, если вы сохранили его данные.
Еще одно объяснение
PackageManagerService
есть еще один интересный метод setKeepUninstalledPackages Что в основном заставляет Android сохранять все данные для указанных приложений, даже если они были удалены.
Как вы сказали, устройство работает управляемо. Обычно управление осуществляется с помощью DevicePolicyManager
. Одной из доступных политик является setKeepUninstalledPackages, который вызывает упомянутый выше метод PackageManagerService
.
Пожалуйста, проверьте код приложения администратора устройства для подтверждения.
person
Amaksoft
schedule
05.09.2019