Проверка деклараций разрешений в Play Console

Вставьте AndroidManifest.xml или вывод aapt2 dump permissions для собранного APK. Будут показаны все разрешения, а те, которым может понадобиться декларация в Google Play Console, — первыми, с тем, чего ждёт Google и что делать. Работает в браузере: ничего не загружается. Страницы отдельных разрешений — на английском.

Работает в вашем браузере. Ничего из вставленного не загружается и не сохраняется.

Зачем проверять объединённый манифест, а не только свой?

Каждая подключённая библиотека приносит свой манифест, и сборка объединяет их с вашим. Так приложение начинает запрашивать разрешение, которое никто в команде не писал: рекламный SDK может добавить рекламный ID, библиотека обновлений или открытия файлов — REQUEST_INSTALL_PACKAGES, библиотека уведомлений или планирования — точные будильники. Google проверяет объединённый результат.

Чтобы увидеть список, который на самом деле получат пользователи:

  • Android Studio: откройте AndroidManifest.xml и нажмите вкладку Merged Manifest внизу редактора. Она также показывает, из какой библиотеки пришла каждая строка.
  • Собранный APK: выполните команду ниже и вставьте её вывод сюда.
aapt2 dump permissions app-release.apk

Как убрать разрешение, добавленное библиотекой?

Объявите то же разрешение в своём манифесте с tools:node="remove". Тогда при объединении оно выпадет, какая бы библиотека его ни запросила. Это одинаково работает в нативных проектах, во Flutter и в React Native (в двух последних файл — android/app/src/main/AndroidManifest.xml).

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:node="remove" />
</manifest>

В проекте Expo укажите его в android.blockedPermissions в конфигурации приложения — это делает то же самое на этапе prebuild:

{
  "expo": {
    "android": {
      "blockedPermissions": ["android.permission.QUERY_ALL_PACKAGES"]
    }
  }
}

Затем проверьте, что делает эта библиотека. Если разрешение ей было нужно, функция может перестать работать, и выбирать придётся между функцией и декларацией.

Чего эта проверка не скажет?

Подходит ли ваше использование разрешения. Google разрешает большинство из них только определённым типам приложений, и только его проверка решает, относится ли к ним ваше. Кроме того, проверка читает только вставленный текст, поэтому не видит, что собирают SDK вашего приложения, на какой уровень API нацелена сборка и не остались ли внутри ключи.

Частые вопросы

Каким разрешениям Android нужна декларация в Play Console?
Чувствительным, которые Google разрешает только определённым типам приложений: фоновое местоположение, доступ ко всем файлам, SMS и журнал звонков, QUERY_ALL_PACKAGES, REQUEST_INSTALL_PACKAGES, точные будильники, полноэкранные интенты, доступ к фото и видео, типы активных служб, рекламный ID и другие. Разрешено ли оно вам, зависит от того, что делает приложение, и решает это только проверка Google.
Почему у приложения есть разрешение, которое я не добавлял?
Библиотеки приносят свои манифесты, а сборка объединяет их с вашим. Чтобы увидеть полный список, откройте объединённый манифест в Android Studio или выполните aapt2 dump permissions для собранного APK.
Как убрать разрешение, добавленное библиотекой?
Объявите его в своём манифесте с tools:node="remove" или в Expo укажите его в android.blockedPermissions. Затем проверьте функцию этой библиотеки, ведь ей это разрешение могло быть нужно.
Мой манифест куда-то загружается?
Нет. Проверка работает в браузере, и вставленный текст никогда не отправляется на сервер.

Источники

Можно ли нам использовать аналитику и измерение рекламы? Аналитика (Vercel, а на публичных страницах ещё и Ahrefs) считает просмотры страниц без cookie. Измерение рекламы позволяет тегу Google на наших публичных страницах видеть, какие визиты пришли с нашей рекламы в Google, с помощью cookie Google. Сайт работает одинаково при любом выборе. Политика cookie · Как Google использует данные ·