Файл маніфесту AndroidManifest.xml
Кожен додаток містить файл манифеста AndroidManifest.xml. Цей файл визначає важливу інформацію про додаток — назву, версію, іконки, які дозволи використовує додаток, реєструє всі використовувані класи **activity**, сервіси тощо. Цей файл можна знайти в проекті в папці manifests:

Файл манифеста може виглядати так:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.viewapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ViewApp">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Елементом кореневого рівня є вузол manifest. В даному випадку тільки визначається пакет додатка - package="com.example.viewapp". Це визначення файлу манифеста за замовчуванням. В кожному конкретному випадку пакет додатка може відрізнятися, решта вмісту при створенні проекту з порожньою activity буде аналогічним.
Більшість налаштувань рівня додатка визначається елементом application. Ряд налаштувань задаються за допомогою атрибутів. За замовчуванням застосовуються наступні атрибути:
- android:allowBackup вказує, чи буде для додатка створюватися резервна копія. Значення
android:allowBackup="true"дозволяє створення резервної копії. - android:icon встановлює іконку додатка. При значенні
android:icon="@mipmap/ic_launcher"іконка додатка береться з каталогуres/mipmap. - android:roundIcon встановлює круглу іконку додатка. Також береться з каталогу
res/mipmap. - android:label задає назву додатка, яке буде відображатися на мобільному пристрої в списку додатків і в заголовку. В даному випадку воно зберігається в рядкових ресурсах -
android:label="@string/app_name". - android:supportsRtl вказує, чи можуть використовуватися різні RTL API - спеціальні API для роботи з правосторонньою орієнтацією тексту (наприклад, для таких мов як арабська чи фарсі).
- android:theme встановлює тему додатка. Детальніше теми будуть розглянуті далі, а поки достатньо знати, що тема визначає загальний стиль додатка. Значення
"@style/Theme.ViewApp"бере тему"Theme.ViewApp"з каталогуres/values/themes.
Вкладені елементи activity
Вкладені елементи activity визначають всі використовувані в додатку activity. У даному випадку видно, що в додатку є тільки одна activity — MainActivity.
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Елемент intent-filter у MainActivity вказує, як ця activity буде використовуватися. Зокрема, за допомогою вузла action android:name="android.intent.action.MAIN", що означає, що ця activity буде вхідною точкою в додаток і не повинна отримувати жодні дані ззовні.
Елемент category android:name="android.intent.category.LAUNCHER" вказує, що MainActivity буде представляти стартовий екран, який відображається при запуску додатка.
Файл манифеста може містити безліч елементів, які мають різні атрибути. Усі можливі елементи та їх атрибути можна знайти в документації. Тут же розглянемо деякі приклади використання.
Визначення версії
За допомогою атрибутів елемента manifest можна визначити версію додатку та його коду:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.viewapp"
android:versionName="1.0"
android:versionCode="1">
<!-- інше вміст-->
</manifest>
Атрибут android:versionName вказує на номер версії, який буде відображатися користувачу і на який будуть орієнтуватися користувачі при роботі з додатком.
Тоді як атрибут android:versionCode представляє номер версії для внутрішнього використання. Цей номер тільки визначає, що одна версія додатку є новішою за іншу з меншим номером версії. Цей номер не відображається користувачам.
При бажанні ми також можемо визначити версію в ресурсах, а тут посилатись на ресурс.
Встановлення версії SDK
Для керування версією Android SDK в файлі манифеста визначається елемент
- minSdkVersion: мінімально підтримувана версія SDK.
- targetSdkVersion: оптимальна версія.
- maxSdkVersion: максимальна версія.
Версія визначається номером API, наприклад, Jelly Beans 4.1 має версію 16, а Android 11 має версію 30:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.viewapp"
android:versionName="1.0"
android:versionCode="1">
<uses-sdk android:minSdkVersion="22" android:targetSdkVersion="30" />
<!-- інше вміст-->
</manifest>
Встановлення дозволів
Іноді додатку потрібні дозволи для доступу до певних ресурсів, наприклад, до списку контактів, камери тощо. Щоб додаток міг працювати з цими ресурсами, в файлі манифеста необхідно встановити відповідні дозволи. Для встановлення дозволів використовується елемент
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.viewapp">
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.CAMERA" android:maxSdkVersion="30" />
<!-- інше вміст-->
</manifest>
Атрибут android:name визначає назву дозволу: в даному випадку на читання списку контактів і використання камери. Опційно можна встановити максимальну версію SDK через атрибут android:maxSdkVersion, який приймає номер API.
Підтримка різних роздільних здатностей екранів
Світ пристроїв Android дуже сильно фрагментований, тут зустрічаються як гаджети з маленьким екраном, так і великі широкоформатні телевізори. І бувають випадки, коли потрібно обмежити використання додатку для певних роздільних здатностей екранів. Для цього в файлі манифеста визначається елемент
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.viewapp">
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="false"
android:xlargeScreens="true" />
<!-- інше вміст-->
</manifest>
Цей елемент має чотири атрибути:
- android:largeScreens - екрани з діагоналлю від 4.5 до 10"
- android:normalScreens - екрани з діагоналлю від 3 до 4.5"
- android:smallScreens - екрани з діагоналлю менше 3"
- android:xlargeScreens - екрани з діагоналлю більше 10"
Якщо атрибут має значення true, то додаток підтримуватиме відповідний розмір екрану.
Заборона на зміну орієнтації
Додаток, залежно від положення пристрою, може знаходитися в альбомній або портретній орієнтації. Не завжди це зручно. Ми можемо зробити так, щоб додаток, незалежно від повороту пристрою, використовував лише одну орієнтацію. Для цього в файлі манифеста для потрібної activity потрібно встановити атрибут android:screenOrientation. Наприклад, заборонимо альбомну орієнтацію:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.viewapp"
android:versionName="1.0"
android:versionCode="1" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ViewApp">
<activity android:name=".MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Значення android:screenOrientation="portrait" вказує, що ця activity буде знаходитися лише в портретній орієнтації. Якщо ж потрібно встановити лише альбомну орієнтацію, тоді використовується значення android:screenOrientation="landscape".