Как правильно добавлять uses-permission в AndroidManifest.xml
Добавьте в манифест только те разрешения, которые реально нужны, объявите их до блока
Как устроены разрешения и что нужно знать
- Normal — низкорисковые (например, INTERNET). Достаточно декларации в манифесте.
- Dangerous — доступ к чувствительным данным (камера, контакты, геолокация, хранилище). Нужна декларация и runtime‑запрос на устройствах с API 23+.
- Signature / SignatureOrSystem — системные, обычно недоступны обычным приложениям.
Ключевое правило: без строки
Пример минимальной декларации:
xml
Если у вас несколько productFlavors или библиотечных модулей — всегда проверяйте итоговый AndroidManifest после merge (Build → Analyze APK или "Merged Manifest" в Android Studio).
Практика: когда и как запрашивать разрешения в коде
- Не запрашивайте dangerous‑разрешение заранее — спрашивайте в момент, когда пользователь выполняет соответствующее действие (открывает камеру, хочет поделиться местоположением).
- Алгоритм:
- Проверка: if (ContextCompat.checkSelfPermission(context, PERM) == PackageManager.PERMISSION_GRANTED) { … }
- Если нет — показать объяснение в UI (короткий текст), затем вызвать запрос через Activity Result API или requestPermissions.
- Обработать результат и корректно деградировать функционал, если разрешение не дано.
- Рекомендация по API: используйте Activity Result API (registerForActivityResult) — это современный и безопасный подход.
Если забыть добавить
Практичные рекомендации и подбор разрешений по функциям
- Сеть: INTERNET, ACCESS_NETWORK_STATE. INTERNET — normal, просто в манифесте.
- Геолокация: ACCESS_FINE_LOCATION (точно), ACCESS_COARSE_LOCATION (приблизительно). Для фоновой геолокации нужны дополнительные объяснения и REQUEST_BACKGROUND_LOCATION (особо внимательно с требованиями Play).
- Камера/аудио: CAMERA, RECORD_AUDIO.
- Хранилище: на современных Android используйте scoped storage, SAF и MediaStore; вместо READ/WRITE_EXTERNAL_STORAGE запрашивайте READ_MEDIA_* (Android 13+).
- Телефон/SMS/Контакты: просите только при очевидной необходимости; такие разрешения чаще вызывают отклонение модерацией.
Используйте альтернативы: Intents на системную камеру/галерею, SAF для файлов, серверную обработку вместо локальных данных.
Частые ошибки
- Разрешение прописано внутри
— Android его игнорирует. - Просьба о dangerous‑perm на старте приложения без объяснения — низкая конверсия согласия.
- Оставшиеся в манифесте старые/ненужные разрешения (например, WRITE_EXTERNAL_STORAGE) — повышают риск отклонения.
- Не тестируют merged manifest и release‑сборку перед отправкой в Play.
Чек‑лист перед релизом: всё
FAQ
- Нужно ли указывать INTERNET в манифесте, если используете только WebView?
- Да, если приложение делает сетевые запросы или WebView загружает контент из сети — указывайте INTERNET.
- Что лучше — requestPermissions или Activity Result API?
- Activity Result API — рекомендуется; удобнее обрабатывать результаты и меньше кода.
- Как проверить, какие разрешения реально используются приложением?
- Проанализируйте код и зависимости, соберите релизный AAB/APK и проверьте итоговый манифест и runtime‑вызовы в процессе тестирования.
(Коротко: объявляйте, проверяйте, просите по ситуации и минимизируйте список разрешений — это снизит риск отклонения и улучшит доверие пользователей.)