Что такое AndroidManifest.xml, его структура и элементы

AndroidManifest.xml — это один из самых важных файлов в проекте Android. Этот файл служит для описания метаданных приложения, определяя его ключевые компоненты, разрешения, необходимые для работы, и другие параметры, которые используются операционной системой Android для управления жизненным циклом приложения.

Основные элементы структуры AndroidManifest.xml

  1. Корневой элемент <manifest>:

    • Атрибуты:
      • package: Указывает имя пакета приложения.
      • android:versionCode: Уникальный номер версии приложения, который увеличивается с каждой новой версией.
      • android:versionName: Человекочитаемая строка, обозначающая версию приложения.
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapp"
        android:versionCode="1"
        android:versionName="1.0">
    
  2. Элемент <application>: Описывает приложение в целом. Включает ссылки на ресурсы, темы, иконки и компоненты приложения (активности, службы, провайдеры контента и т.д.).

    • Атрибуты:
      • android:icon: Указывает на иконку приложения.
      • android:label: Указывает на строку с названием приложения.
      • android:theme: Определяет тему оформления.
      • android:allowBackup: Определяет возможность резервного копирования данных приложения.
      • android:supportsRtl: Указывает, поддерживает ли приложение RTL (right-to-left) макеты.
    <application
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:allowBackup="true"
        android:supportsRtl="true">
    
  3. Элементы <activity>: Описывают экраны (активности) приложения. Каждая активность должна быть объявлена в AndroidManifest.xml. Активности могут включать различные атрибуты, такие как метаданные, действия и категории.

    • Важные атрибуты:
      • android:name: Имя класса активности.
      • android:label: Заголовок активности.
      • android:exported: Указывает, может ли активность запускаться другими приложениями.
      • android:launchMode: Определяет, как активности будут запускаться (например, singleTop, singleTask).
    <activity android:name=".MainActivity"
        android:label="@string/app_name"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    
  4. Элементы <service>: Службы описываются в этом элементе и используются для выполнения долгих операций в фоне (например, загрузка файлов или обработка данных).

    • Важные атрибуты:
      • android:name: Имя класса службы.
      • android:exported: Определяет, может ли служба быть доступна другим приложениям.
    <service android:name=".MyService"
        android:exported="false" />
    
  5. Элементы <receiver>: Используются для описания компонентов, которые могут получать широковещательные сообщения (broadcasts). Обычно это сообщения системы или других приложений.

    • Важные атрибуты:
      • android:name: Имя класса приёмника.
    <receiver android:name=".MyBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    
  6. Элементы <provider>: Описывают поставщиков контента, которые позволяют приложениям делиться данными между собой.

    • Важные атрибуты:
      • android:name: Имя класса провайдера.
      • android:authorities: Уникальные идентификаторы, по которым этот провайдер может быть доступен.
    <provider
        android:name=".MyContentProvider"
        android:authorities="com.example.myapp.provider"
        android:exported="false" />
    

Разрешения в AndroidManifest.xml

Приложению могут требоваться различные разрешения для выполнения задач (например, доступ к интернету, к камере, к данным пользователя). Разрешения запрашиваются с помощью элемента <uses-permission>.

Важные примеры разрешений:

  • Доступ в интернет:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • Доступ к камере:
    <uses-permission android:name="android.permission.CAMERA" />
  • Доступ к местоположению:
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Пример полного файла AndroidManifest.xml:

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

    <!-- Разрешения -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!-- Описание приложения -->
    <application
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:allowBackup="true"
        android:supportsRtl="true">

        <!-- Главная активность приложения -->
        <activity android:name=".MainActivity"
            android:label="@string/app_name"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Служба -->
        <service android:name=".MyService"
            android:exported="false" />

        <!-- Приёмник -->
        <receiver android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

Основные компоненты:

  • Активности (<activity>): Экраны и пользовательские интерфейсы.
  • Службы (<service>): Фоновые операции.
  • Приёмники (<receiver>): Обработка широковещательных сообщений.
  • Провайдеры (<provider>): Управление доступом к данным.

AndroidManifest.xml — важный файл, который связывает разные компоненты приложения и определяет их взаимодействие с системой.