Что такое AndroidManifest.xml и как его правильно настроить
AndroidManifest.xml — это обязательный XML‑файл‑паспорт приложения: в нём указывают пакет, компоненты (Activity, Service, BroadcastReceiver, ContentProvider), runtime‑разрешения и intent‑фильтры. Без корректного манифеста приложение может не запускаться или быть отклонено при публикации.
Кратко: зачем нужен AndroidManifest.xml
Манифест сообщает системе Android, как взаимодействовать с приложением:
- какие экраны доступны и какой из них — лаунчер;
- какие фоновые сервисы и провайдеры данных присутствуют;
- какие разрешения запрашивает приложение;
- какие внешние вызовы (deep links, share intents) оно обрабатывает;
- метаданные: minSdkVersion/targetSdkVersion, иконка, тема.
Разделы
Как настроить манифест — пошагово
- Базовый шаблон Пример минимальной структуры:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
- Activity и intent‑фильтры
- Пометка android:exported="true|false" обязательна для компонентов с intent‑filter (Android 12+).
- Для deep links добавьте и android:autoVerify="true" при необходимости.
- Разрешения и runtime
- Указывайте опасные разрешения в манифесте, но запрашивайте их в коде (runtime) — особенно для Android 6+.
- Для уведомлений на Android 13+ добавьте POST_NOTIFICATIONS и запрашивайте в рантайме.
- Провайдеры и файловый доступ
- Для обмена файлами используйте FileProvider и объявите
с правильным authorities. - Scoped storage требует корректной конфигурации и manifest‑провайдера, если вы делитесь файлами.
Продвинутые настройки и безопасность
- Установите targetSdkVersion в Gradle и следите за изменениями платформы — новая политика влияет на поведение разрешений.
- Используйте
для перечисления пакетов, с которыми приложение взаимодействует (Android 11+). - Для сервисов: явно указывайте android:exported и permission, если нужно ограничить вызовы.
- Для релиза минимизируйте разрешения и включите obfuscation (ProGuard/R8) в сборке.
Не добавляйте доступ к SMS, микрофону или контактам без явной необходимости — это повышает риск блокировки в магазине и отказа пользователей.
Частые ошибки
- Crash на старте: забыли android:exported="true" у Activity с intent‑filter (Android 12+).
- "App not installed": конфликт package или неверный signature при обновлении.
- Нет доступа к сети: забыли android.permission.INTERNET.
- Иконка не меняется: кеш сборки — выполните Clean/Rebuild.
Тестируйте приложение на нескольких уровнях API (например, 21, 30, 33) и используйте Lint/ADB для обнаружения проблем.
FAQ
-
Нужно ли редактировать манифест в Flutter/React Native? Манифест генерируется шаблоном, но для добавления разрешений или intent‑фильтров правки делаются вручную в android/app/src/main/AndroidManifest.xml.
-
Где указывать minSdk и targetSdk? В build.gradle (module), а не в самом манифесте; манифест может содержать метаданные, но source of truth — Gradle.
-
Что делать при отклонении в Google Play за лишние permissions? Уберитесь из манифеста лишние
, объясните в форме почему нужен доступ или используйте альтернативные подходы (например, только в момент использования).
Заключение: аккуратно формализуйте компоненты и разрешения в AndroidManifest.xml, проверяйте android:exported и runtime‑запросы — это сократит ошибки при запуске и ускорит прохождение модерации.