Что такое AndroidManifest.xml? Зачем его используют? Что мы можем там декларировать?android-64

Основное назначение AndroidManifest.xml

AndroidManifest.xml — это фундаментальный конфигурационный файл в каждом Android-приложении, который:

  • Описывает структуру приложения для Android-системы
  • Содержит метаданные о приложении
  • Определяет разрешения и требования
  • Регистрирует все компоненты приложения

Файл всегда находится в папке app/src/main/ и имеет строгую XML-структуру.


Ключевые возможности декларации

1. Базовые настройки приложения

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <application
        android:name=".MyApplication"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:allowBackup="true">
    </application>
</manifest>
  • package — уникальный идентификатор приложения
  • android:icon — иконка приложения
  • android:theme — тема по умолчанию
  • allowBackup — разрешение на бэкап в Google Drive

2. Регистрация компонентов

Все компоненты должны быть задекларированы в манифесте:

Activity

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTop"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Service

<service android:name=".MyService"
    android:enabled="true"
    android:exported="false" />

BroadcastReceiver

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

ContentProvider

<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapp.provider"
    android:exported="false" />

3. Разрешения

Запрашиваемые разрешения:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Собственные разрешения :

<permission
    android:name="com.example.myapp.SPECIAL_PERMISSION"
    android:protectionLevel="dangerous"/>

4. Аппаратные и программные требования

<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34"/>

5. Другие важные декларации

  • Мета-данные:
<meta-data android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version"/>
  • Обработчики ссылок (Deep Links):
<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="https" android:host="example.com"/>
</intent-filter>
  • Конфигурация мультидексинга:
<application android:name="androidx.multidex.MultiDexApplication">
    ...
</application>

Почему AndroidManifest так важен?

  1. Система Android читает этот файл перед запуском приложения
  2. Google Play анализирует манифест для определения совместимости с устройствами
  3. Сборщик (Gradle) использует информацию из манифеста при компиляции
  4. Без правильной декларации компоненты просто не будут работать

Резюмируем

  • AndroidManifest.xml — обязательный конфигурационный файл каждого приложения
  • Основные декларации:
    • Пакет и базовые настройки приложения
    • Все компоненты (Activity, Service и др.)
    • Разрешения и требования к системе
    • Intent-фильтры и deep links
  • Без правильной настройки манифеста приложение либо не соберется, либо будет работать некорректно
  • Современные подходы: некоторые настройки можно дублировать в build.gradle (minSdkVersion и др.)