В Android разрешения предоставляют средства контроля, повышающие осведомленность пользователя и ограничивающие доступ приложения к конфиденциальным данным. Настройка разрешений в Android 8.0 и более ранних версиях включает в себя добавление в список разрешенных приложений (allowlisting), без которого привилегированные приложения отключаются, даже если они находятся в пути priv-app . В Android 9 и более поздних версиях устройство, пытающееся использовать приложения, которые не были должным образом добавлены в список разрешенных приложений, не запустится.
В Android 10 была введена концепция роли — уникального имени в системе, связанного с определенными требованиями и привилегиями. Назначайте роли приложениям, чтобы предоставлять им разрешения для конкретной цели, и настраивайте роли по умолчанию с помощью ресурсов конфигурации платформы.
Улучшена защита от потенциально вредоносных приложений (ПВП):
- Прозрачность в отношении потенциально опасного поведения приложений.
- Пользовательский контроль над поведением приложения.
- Разработчики приложений могут использовать личные данные по своему усмотрению, защищенные разрешениями.
Установка пакета и права доступа
В Android 9 и более ранних версиях функции установки пакетов и управления разрешениями содержались в пакете PackageInstaller ( //packages/apps/PackageInstaller ). В Android 10 и более поздних версиях функциональность управления разрешениями находится в отдельном пакете PermissionController ( //packages/apps/PermissionController ). На рисунке 1 показано расположение этих двух пакетов в Android 10.

Рисунок 1. Функции установки пакетов и управления разрешениями в Android 10.
Списки разрешенных лиц и доступ
В Android 6.0 и выше приложения запрашивают доступ к опасным разрешениям во время выполнения . В Android 10 добавлены разрешения, предоставляемые функцией распознавания активности (AR), которые предлагают пользователю изменить или разрешить опасные разрешения.
В Android 8.0 требовалось явно указывать разрешения для привилегированных приложений в конфигурационных XML-файлах системы в каталоге /etc/permissions . В Android 9 и более поздних версиях необходимо указывать разрешения для привилегированных приложений, иначе устройство не сможет загрузиться.
Чтобы ограничить видимость внутренних API и предотвратить случайный доступ приложений к библиотекам платформы, в Android 7.0 были введены пространства имен для нативных библиотек . Это позволяет отделить системные библиотеки от библиотек приложений, и производители устройств могут добавлять свои собственные нативные библиотеки.
Начиная с Android 10, приложениям для доступа к содержимому экрана устройства необходимы как разрешения на подпись, так и согласие пользователя. Привилегированным приложениям, использующим функцию бесшумного захвата, например, для создания скриншотов, следует использовать класс MediaProjection .
В Android 15 необходимо явно указывать разрешения подписи платформы, запрашиваемые несистемными приложениями или запрашиваемые в результате обновлений системных приложений, в XML-файлах конфигурации системы в каталоге /etc/permissions .
Прозрачность и конфиденциальность
В Android 6.0 и выше заводской MAC-адрес устройства защищен от доступа со стороны операторов Wi-Fi и анализаторов пакетов. Дополнительные ограничения, начиная с Android 10, запрещают приложениям доступ к неизменяемым идентификаторам устройства (ID), если они не включены в список разрешенных для использования с привилегированными правами . (В разделе «Подключение» содержится соответствующее обсуждение идентификаторов устройств , поскольку это влияет на операторов связи.)
В Android 9 и более ранних версиях пользователи делают постоянный выбор при предоставлении приложениям доступа к местоположению. Начиная с Android 10, функция трехпозиционных разрешений на доступ к местоположению предоставляет пользователям три варианта разрешения доступа приложения к местоположению устройства. Эти требования к разрешениям применяются к приложениям в Android 10 независимо от целевого SDK.
Начиная с Android 10, можно настроить разрешения для других функций прозрачности и конфиденциальности.
- Напоминание о доступе к местоположению в фоновом режиме показывает пользователям, когда приложение получает доступ к местоположению их устройства, используя разрешение
ACCESS_FINE_LOCATIONв фоновом режиме. - Данные, связанные с привязанностью контактов и управляемые компонентом Contacts Provider, доступны по-другому: приложения не могут записывать или считывать данные о привязанности контактов из базы данных. Это влияет на API, связанные с вызывающими абонентами .
Упрощенные конфигурации
В Android 6.0 и более поздних версиях упрощена настройка разрешений.
- Настройки параметров службы, запускаемой с помощью
initпозволяют хранить все аспекты конфигурации службы в одном файле.rc. При настройке параметров службы, не запускаемой с помощьюinit, следует использоватьfs_config.cдля настройки параметров файловой системы. - В Android 7.x и более ранних версиях механизм идентификаторов Android (AID) расширен за счет использования специфичного для устройства файла
android_filesystem_config.hдля указания возможностей файловой системы и/или пользовательских AID производителя устройства. Android 8.0 и более поздних версий поддерживает новый метод расширения возможностей файловой системы . - В Android 8.0 обработка команд USB переместилась из специфических для устройства скриптов
init(замена слоев HAL) в собственный USB-демон. Интерфейс USB HAL должен быть реализован на каждом устройстве, запускаемом под управлением Android 8.0 и выше.