Разрешения во время выполнения

В Android 6.0 и более поздних версиях модель разрешений приложений Android предназначена для того, чтобы сделать разрешения более понятными, полезными и безопасными для пользователей. Модель переместила приложения Android, которым требуются опасные разрешения (см. Затронутые разрешения ) из модели разрешений времени установки в модель разрешений времени выполнения :

  • Разрешения во время установки

    ( Android 5.1 и более ранние версии) Пользователи предоставляют приложению опасные разрешения при установке или обновлении приложения. Производители и операторы связи могут предварительно устанавливать приложения с предварительно предоставленными разрешениями без уведомления пользователя.

  • Разрешения во время выполнения

    ( Android 6.0–9 ) Пользователи предоставляют опасные разрешения приложению во время его работы. Когда запрашиваются разрешения (например, когда приложение запускается или когда пользователь получает доступ к определенной функции), зависит от приложения, но пользователь предоставляет или отказывает приложению в доступе к определенным группам разрешений. OEM-производители/операторы могут предварительно устанавливать приложения, но не могут предварительно предоставлять разрешения, если они не проходят процедуру исключения. (См. Создание исключений .)

    ( Android 10 ) Пользователи видят повышенную прозрачность и могут контролировать, какие приложения имеют разрешения среды выполнения для распознавания активности (AR). В диалоговом окне разрешений во время выполнения пользователям предлагается либо всегда разрешать, либо разрешать во время использования, либо запрещать разрешения. При обновлении ОС до Android 10 разрешения, данные приложениям, сохраняются, но пользователи могут зайти в « Настройки » и изменить их.

Разрешения во время выполнения не позволяют приложениям получать доступ к личным данным без согласия пользователя и предоставляют им дополнительный контекст и информацию о типах разрешений, которые приложения либо запрашивают, либо предоставляют. Модель времени выполнения побуждает разработчиков помогать пользователям понять, почему приложениям требуются запрошенные разрешения, и обеспечивает большую прозрачность, чтобы пользователи могли принимать более обоснованные решения о предоставлении или отказе в них.

Затронутые разрешения

Android 6.0 и более поздние версии требуют опасных разрешений для использования модели разрешений во время выполнения. Опасные разрешения — это разрешения с более высоким риском (такие как READ_CALENDAR ), которые предоставляют запрашивающим приложениям доступ к личным данным пользователя или контроль над устройством, что может негативно повлиять на пользователя. Чтобы просмотреть список опасных разрешений, выполните команду:

adb shell pm list permissions -g -d

Android 6.0 и более поздние версии не изменяют поведение обычных разрешений . Это все неопасные разрешения, включая обычные, системные и сигнатурные. Обычные разрешения — это разрешения с меньшим риском (такие как SET_WALLPAPER ), которые предоставляют запрашивающим приложениям доступ к изолированным функциям уровня приложения с минимальным риском для других приложений, системы или пользователя. Как и в Android 5.1 и более ранних версиях, система автоматически предоставляет обычные разрешения запрашивающему приложению при установке и не запрашивает одобрение пользователя. Подробнее о разрешениях см. в документации по элементу <permission> .

Жесткие и мягкие ограничения в Android 10

Помимо того, что это опасно, разрешение может быть либо жестко ограниченным, либо мягко ограниченным. В любом случае ограниченное разрешение также должно быть занесено в белый список. Жесткие ограничения, не входящие в белый список, ведут себя иначе, чем мягкие ограничения, не входящие в белый список:

  • ( Жесткие ограничения ) Приложениям нельзя предоставлять разрешения, которые не входят в белый список.
  • ( Мягкие ограничения ) Приложения без белого списка ведут себя в соответствии с конкретным разрешением, которое они запрашивают. Поведение описано в общедоступной документации для запрошенного разрешения.

При установке приложения установщик (например, Google Play Store) может не включать в белый список ограниченные разрешения для приложения. Разрешения ограничены платформой и предоставляются только в том случае, если приложение соответствует особым критериям политики платформы. Примеры жестко ограниченных типов разрешений включают разрешения для SMS и журнала вызовов.

Белый список происходит во время установки, и когда

  • приложение уже установлено во время обновления Android с 9 до 10.
  • предварительно предоставлено разрешение или предварительно установлено приложение.
  • разрешение требуется для роли, которая уже определена, чтобы внести разрешение в белый список.
  • установщик (например, Google Play Store) помечает разрешение как внесенное в белый список.

Пользователи не могут вручную вносить разрешения в белый список.

Требования

Модель разрешений во время выполнения применяется ко всем приложениям, включая предустановленные приложения и приложения, доставленные на устройство в рамках процесса установки. Требования к прикладному программному обеспечению включают:

  • Модель разрешений во время выполнения должна быть одинаковой для всех устройств под управлением Android 6.0 и более поздних версий. Это обеспечивается тестами Android Compatibility Test Suite (CTS).
  • Приложения должны предлагать пользователям предоставить разрешения приложения во время выполнения. Подробности см. в разделе Обновление приложений . Ограниченные исключения могут быть предоставлены приложениям и обработчикам по умолчанию, которые обеспечивают основные функции устройства, лежащие в основе ожидаемой работы устройства. (Например, приложение номеронабирателя по умолчанию для обработки ACTION_CALL может иметь доступ к разрешению телефона.) Подробнее см. в разделе Создание исключений .
  • Предварительно загруженные приложения с опасными разрешениями должны быть нацелены на уровень API 23 и поддерживать модель разрешений во время выполнения. То есть поток пользовательского интерфейса во время установки приложения не должен отклоняться от реализации PermissionController в AOSP, пользователи могут отзывать опасные разрешения предустановленных приложений и т. д.
  • Безголовые приложения должны использовать действие для запроса разрешений или обмена UID с другим приложением, имеющим необходимые разрешения. Подробнее см. в разделе Безголовые приложения .

Миграция разрешений

Разрешения, предоставленные приложениям на Android 5.x, остаются предоставленными после обновления до Android 6.0 или более поздней версии, но пользователи могут отозвать эти разрешения в любое время.

В обновлении Android 9–10 все жестко ограниченные разрешения попадают в белый список. Подробные сведения о реализации разделенных разрешений для основного и фонового режима см. в разделе Изменение конфиденциальности Android 10 , начиная с запроса местоположения в фоновом режиме .

Интеграция

При интеграции модели разрешений среды выполнения приложений для Android 6.0 и более поздних версий необходимо обновить предустановленные приложения для работы с новой моделью. Вы также можете определить исключения для приложений, которые являются обработчиками/поставщиками по умолчанию для основных функций, определить настраиваемые разрешения и настроить тему, используемую в приложении PermissionController .

Обновление приложений

Приложениям в образе системы и предустановленным приложениям автоматически не предоставляются разрешения. Мы рекомендуем вам сотрудничать с разработчиками предустановленных приложений (OEM, операторами связи и сторонними организациями) для внесения необходимых изменений в приложение в соответствии с рекомендациями для разработчиков . В частности, вы должны убедиться, что предустановленные приложения изменены, чтобы избежать сбоев и других проблем, когда пользователи отзывают разрешения.

Предзагруженные приложения

В Android 9 и более ранних версиях предварительно загруженные приложения, использующие опасные разрешения, должны быть нацелены на уровень API 23 или выше и поддерживать модель разрешений AOSP Android 6.0 и выше. Например, поток пользовательского интерфейса во время установки приложения не должен отличаться от реализации PermissionController в AOSP. Пользователи могут даже отозвать опасные разрешения предустановленных приложений.

В Android 6.0–9 некоторые разрешения предоставляются во время процесса установки. Однако, начиная с версии 10, процесс установки (выполняемый приложением Package Installer ) представляет собой отдельную функцию от предоставления разрешений (в приложении Permission Controller ).

Безголовые приложения

Только действия могут запрашивать разрешения. Службы не могут запрашивать разрешения напрямую.

  • В Android 5.1 и более ранних версиях безголовые приложения могут запрашивать разрешения при установке или если они были предварительно установлены без использования действия.
  • В Android 6.0 и более поздних версиях безголовые приложения должны использовать один из следующих методов для запроса разрешений:
    • Добавьте действие для запроса разрешений. (Это предпочтительный метод.)
    • Поделитесь UID с другим приложением, имеющим необходимые разрешения. Используйте этот метод, только если вам нужна платформа для обработки нескольких APK как одного приложения.

Цель состоит в том, чтобы не сбить пользователей с толку запросами разрешений, которые появляются вне контекста.

Настройка пользовательского интерфейса PackageInstaller

При желании вы можете настроить тему пользовательского интерфейса разрешений, обновив темы устройства по умолчанию ( Theme.DeviceDefault.Settings и Theme.DeviceDefault.Light.Dialog.NoActionBar ), используемые PackageInstaller. Однако, поскольку согласованность имеет решающее значение для разработчиков приложений, вы не можете настроить размещение, положение и правила появления пользовательского интерфейса разрешений.

Чтобы включить строки для дополнительных языков, отправьте строки в AOSP.

Создание исключений

Вы можете предварительно предоставить разрешения приложениям, которые являются обработчиками или поставщиками по умолчанию для основных функций ОС, используя класс DefaultPermissionGrantPolicy.java в PackageManager. Примеры:

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

Определение пользовательских разрешений

Вы можете определить настраиваемые разрешения и группы как обычные или опасные и добавить разрешения OEM/оператора к существующим группам разрешений, как это было в Android 5.x и более ранних выпусках.

В Android 6.0 и более поздних версиях, если вы добавляете новое опасное разрешение, оно должно обрабатываться так же, как и другие опасные разрешения (запрошенные во время выполнения приложения и отзываемые пользователями). Конкретно:

  • Вы можете добавить новые разрешения в текущую группу, но вы не можете изменить сопоставление AOSP опасных разрешений и групп опасных разрешений. (Другими словами, вы не можете удалить разрешение из группы и назначить его другой группе).
  • Вы можете добавлять новые группы разрешений в приложения, установленные на устройстве, но вы не можете добавлять новые группы разрешений в манифест платформы.

Проверка разрешений

Android включает тесты Compatibility Test Suite (CTS), которые проверяют, что индивидуальные разрешения сопоставлены с правильными группами. Прохождение этих тестов является обязательным требованием для совместимости с Android 6.0 и более поздними версиями CTS.