Что такое AndroidManifest.xml и как его правильно настроить

AndroidManifest.xml — это обязательный XML‑файл‑паспорт приложения: в нём указывают пакет, компоненты (Activity, Service, BroadcastReceiver, ContentProvider), runtime‑разрешения и intent‑фильтры. Без корректного манифеста приложение может не запускаться или быть отклонено при публикации.

Кратко: зачем нужен AndroidManifest.xml

Манифест сообщает системе Android, как взаимодействовать с приложением:

  • какие экраны доступны и какой из них — лаунчер;
  • какие фоновые сервисы и провайдеры данных присутствуют;
  • какие разрешения запрашивает приложение;
  • какие внешние вызовы (deep links, share intents) оно обрабатывает;
  • метаданные: minSdkVersion/targetSdkVersion, иконка, тема.

Разделы должны идти до тега . Указывайте только необходимые permissions — лишние повышают риск отклонения в Google Play.

Как настроить манифест — пошагово

  1. Базовый шаблон Пример минимальной структуры:
<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>
  1. Activity и intent‑фильтры
  • Пометка android:exported="true|false" обязательна для компонентов с intent‑filter (Android 12+).
  • Для deep links добавьте и android:autoVerify="true" при необходимости.
  1. Разрешения и runtime
  • Указывайте опасные разрешения в манифесте, но запрашивайте их в коде (runtime) — особенно для Android 6+.
  • Для уведомлений на Android 13+ добавьте POST_NOTIFICATIONS и запрашивайте в рантайме.
  1. Провайдеры и файловый доступ
  • Для обмена файлами используйте 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‑запросы — это сократит ошибки при запуске и ускорит прохождение модерации.