Файл маніфесту 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. У даному випадку видно, що в додатку є тільки одна activityMainActivity.

<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".