← Назад к вопросам

Что такое AndroidManifest?

1.0 Junior🔥 161 комментариев
#Нативная интеграция

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

AndroidManifest.xml: Назначение и структура

Определение

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

Это своего рода "паспорт" приложения для ОС Android, где указано, что умеет делать приложение и какие ресурсы ему нужны.

Базовая структура

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <!-- Объявление разрешений (permissions) -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!-- Требования к оборудованию -->
    <uses-feature
        android:name="android.hardware.camera"
        android:required="true" />

    <!-- Приложение и его компоненты -->
    <application
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:debuggable="true">

        <!-- Activity (экран приложения) -->
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Service (фоновый сервис) -->
        <service
            android:name=".services.NotificationService"
            android:exported="false" />

        <!-- Broadcast Receiver (получатель событий) -->
        <receiver
            android:name=".receivers.BootCompletedReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <!-- Content Provider (доступ к данным) -->
        <provider
            android:name=".providers.DataProvider"
            android:authorities="com.example.myapp.provider"
            android:exported="false" />

    </application>

</manifest>

Основные элементы

1. Permissions (Разрешения)

<!-- Объявляем разрешения, которые нужны приложению -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Для Flutter приложения в интеграции с платформой:

// android/app/build.gradle
android {
    compileSdkVersion 33 // Указываем target API version
}

2. Activities (Экраны)

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTop"
    android:theme="@style/LaunchTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

3. Services (Фоновые процессы)

<service
    android:name=".services.LocationService"
    android:exported="false"
    android:foregroundServiceType="location" />

4. Broadcast Receivers

<receiver
    android:name=".receivers.NotificationReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Практический пример в Flutter проекте

Файл: android/app/src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flutter_app">

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

    <!-- Требования к оборудованию -->
    <uses-feature
        android:name="android.hardware.location.gps"
        android:required="false" />

    <!-- Поддержка разных размеров экранов -->
    <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />

    <application
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="false">

        <!-- Flutter Activity -->
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode">
            <meta-data
                android:name="io.flutter.embedding.android.NormalTheme"
                android:resource="@style/NormalTheme" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Для работы с deep links -->
        <activity
            android:name=".DeepLinkActivity"
            android:exported="true">
            <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"
                    android:path="/invite" />
            </intent-filter>
        </activity>

    </application>

</manifest>

Типичные настройки в Flutter приложениях

1. Интернет доступ

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

2. Камера для video_player или camera пакета

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />

3. Геолокация для location пакета

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

4. Работа с файлами

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

5. Cleartext traffic (важно для разработки)

<!-- android/app/src/main/AndroidManifest.xml -->
<application
    android:usesCleartextTraffic="true">
    <!-- ... -->
</application>

Процесс сборки

# Flutter автоматически обрабатывает AndroidManifest.xml
flutter build apk

# Можно посмотреть финальный manifest после сборки
cat build/app/intermediates/manifest/release/AndroidManifest.xml

Важные моменты

android:exported attribute (API 31+)

<!-- ✅ Правильно: явно указываем видимость -->
<activity android:name=".MainActivity" android:exported="true" />
<service android:name=".MyService" android:exported="false" />

<!-- ❌ Неправильно: без указания exported приложение не скомпилируется на современных версиях -->
<activity android:name=".OldActivity" />

Минимальная версия Android

// android/app/build.gradle
android {
    minSdkVersion 21
    targetSdkVersion 33
    compileSdkVersion 33
}

Заключение

AndroidManifest.xml — это критически важный файл для работы Android приложения. Он:

  • Определяет, какие разрешения нужны приложению
  • Описывает все компоненты приложения (Activity, Service, Broadcast Receiver)
  • Указывает требования к оборудованию и версии ОС
  • Содержит важные метаданные для системы Android

В Flutter проекте этот файл находится в android/app/src/main/AndroidManifest.xml и важно понимать его структуру для интеграции с нативным функционалом Android.

Что такое AndroidManifest? | PrepBro