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

Какие знаешь сущности в манифесте?

1.6 Junior🔥 202 комментариев
#Android компоненты

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

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

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

Сущности в AndroidManifest.xml

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

1. Основные компоненты приложения (Application Components)

Это ключевые строительные блоки приложения, каждый из которых является точкой входа для системы или пользователя.

  • <activity> — представляет один экран с пользовательским интерфейсом. Каждое Activity должно быть объявлено в манифесте.

    <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> — компонент для выполнения длительных операций в фоне без пользовательского интерфейса. Например, воспроизведение музыки или загрузка файлов.

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

    <receiver
        android:name=".MyBootReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    
  • <provider> (ContentProvider) — управляет общим набором данных приложения, предоставляя к нему доступ другим приложениям через стандартизированный API (например, доступ к контактам или медиафайлам).

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

2. Корневой элемент и атрибуты приложения

  • <manifest> — корневой элемент файла. Содержит объявление пространства имен (xmlns:android) и ключевые атрибуты пакета приложения (package), версий кода (versionCode) и имени (versionName).

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapp"
        android:versionCode="1"
        android:versionName="1.0">
    
  • <application> — контейнер для объявления компонентов приложения. Содержит важные атрибуты, влияющие на поведение всего приложения:

    *   `android:icon` и `android:label` — иконка и название приложения.
    *   `android:theme` — тема стилей по умолчанию.
    *   `android:allowBackup` и `android:usesCleartextTraffic` — настройки безопасности и резервного копирования.
    *   `android:hardwareAccelerated` — включение аппаратного ускорения.
```xml
<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:allowBackup="true">
```

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

  • <uses-permission> — объявляет разрешение, которое необходимо приложению для доступа к защищенным функциям ОС или другого приложения (например, интернет, камера, контакты).
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    
  • <permission> — позволяет самому приложению определить собственное разрешение для защиты своих компонентов.
  • <uses-feature> — декларирует аппаратные или программные функции, которые использует приложение (например, NFC, Bluetooth). Это помогает Google Play фильтровать установку на устройства, где эти функции отсутствуют.

4. Конфигурации и фильтры

  • <intent-filter> — определяет, как компонент (чаще всего Activity или Receiver) может быть запущен. Указывает типы действий (action), данных (data) и категории (category), которые компонент может обрабатывать. Классический пример — фильтр для Activity-точки входа с действием MAIN и категорией LAUNCHER.
  • <meta-data> — хранит произвольные данные в виде пар "ключ-значение" для родительского компонента (Activity, Service, Application и др.). Часто используется для передачи конфигурации библиотекам (например, Firebase, карты).
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="YOUR_API_KEY_HERE"/>
    

5. Современные особенности (начиная с Android 12+)

  • Атрибут android:exported — стал обязательным для всех компонентов, объявляющих intent-filter, начиная с Android 12 (API 31). Определяет, могут ли другие приложения запускать данный компонент (true) или он доступен только внутри своего приложения (false). Критически важен для безопасности.

  • <queries> — начиная с Android 11 (API 30), для взаимодействия с другими приложениями (через implicit intent или querying packages) часто требуется явно объявить их пакеты или intent-фильтры в этом теге. Это часть усиленной политики конфиденциальности.

    <queries>
        <package android:name="com.example.targetapp" />
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="text/plain" />
        </intent>
    </queries>
    

Итог: Манифест — это декларативный "паспорт" приложения для системы Android. Он не только регистрирует компоненты, но и определяет политики безопасности (exported), требования к устройству (uses-feature, permissions), точку входа и взаимодействие с экосистемой (queries). Понимание каждой сущности и ее атрибутов необходимо для создания корректно работающего, безопасного и совместимого приложения.

Какие знаешь сущности в манифесте? | PrepBro