App-Manifest – Übersicht

Jedes App-Projekt muss eine AndroidManifest.xml-Datei haben, die genau mit Name, im Stammverzeichnis des Projektquellsatzes. Die Manifestdatei enthält wichtige Informationen zu Ihrer App für die Android-Build-Tools, das Android-Betriebssystem und Google Play.

In der Manifestdatei muss unter anderem Folgendes deklariert werden:

  • Die Komponenten der App, einschließlich aller Aktivitäten, Dienste, Übertragungsempfänger und Inhaltsanbieter. Für jede Komponente müssen grundlegende Eigenschaften definiert werden, z. B. der Name der Kotlin- oder Java-Klasse. Außerdem können Sie z. B. die verfügbaren Gerätekonfigurationen Intent-Filter, die beschreiben, wie die Komponente gestartet werden kann. Weitere Informationen zu App-Komponenten finden Sie im nächsten Abschnitt.
  • Die Berechtigungen, die die App benötigt, um auf geschützte Teile des Systems oder andere Apps zugreifen. Außerdem deklariert sie alle Berechtigungen, die andere Apps haben müssen, wenn sie auf Inhalte dieser App zugreifen möchten. Weitere Informationen zu Berechtigungen finden Sie in einem der folgenden Abschnitte.
  • Welche Hard- und Softwarefunktionen für die App erforderlich sind, was sich auf können Geräte die App über Google Play installieren. Weitere Informationen zur Gerätekompatibilität

Wenn du deine App mit Android Studio erstellst, wird die Manifestdatei wird für Sie erstellt und die meisten wesentlichen Manifestelemente werden erstellen Sie Ihre App, insbesondere wenn Sie Codevorlagen verwenden.

Dateifunktionen

In den folgenden Abschnitten wird beschrieben, wie einige der wichtigsten Merkmale Ihrer App in der Manifest-Datei widergespiegelt.

App-Komponenten

Für jede App Komponente, die Sie in Ihrer App erstellen, Deklariere ein entsprechendes XML-Element in der Manifestdatei:

Wenn Sie von einer dieser Komponenten abgeleitete Klassen erstellen, ohne sie im Manifest zu deklarieren kann das System sie nicht starten.

Geben Sie den Namen der abgeleiteten Klasse mit der name an. unter Verwendung der vollständigen Paketbezeichnung. Beispiel: Die abgeleitete Activity-Klasse wird so deklariert:

<manifest ... >
    <application ... >
        <activity android:name="com.example.myapp.MainActivity" ... >
        </activity>
    </application>
</manifest>

Wenn das erste Zeichen im name-Wert jedoch ein Punkt ist, wird der Namespace der App aus der namespace-Eigenschaft der build.gradle-Datei auf Modulebene vorangestellt. Wenn der Namespace beispielsweise "com.example.myapp" lautet, wird der folgende Aktivitätsname in com.example.myapp.MainActivity aufgelöst:

<manifest ... >
    <application ... >
        <activity android:name=".MainActivity" ... >
            ...
        </activity>
    </application>
</manifest>

Weitere Informationen zum Festlegen des Paketnamens oder Namespace finden Sie unter Namespace festlegen.

Bei App-Komponenten, die sich in Unterpaketen befinden, z. B. com.example.myapp.purchases – mit dem Wert name muss die fehlende Teilpaketnamen wie ".purchases.PayActivity" an. Verwenden Sie alternativ die Methode vollständig qualifizierter Paketname.

Intent-Filter

App-Aktivitäten, Dienste und Übertragungen Empfänger werden durch Intents aktiviert. Ein Intent ist eine Nachricht, Ein Intent-Objekt, das ein auszuführende Aktion, einschließlich der Daten, auf die reagiert werden soll, der Kategorie Komponente, die die Aktion ausführen soll, sowie weitere Anweisungen.

Wenn eine App einen Intent an das System ausgibt, findet das System eine App Komponente, die den Intent basierend auf dem Intent-Filter verarbeiten kann -Deklarationen in der Manifest-Datei jeder App. Das System startet eine Instanz der übereinstimmenden Komponente und übergibt das Intent-Objekt an diese Komponente. Wenn mehrere Apps kann der Nutzer auswählen, welche App er verwenden möchte.

Eine App-Komponente kann eine beliebige Anzahl von Intent-Filtern haben (definiert mit dem <intent-filter> -Element), die jeweils eine unterschiedliche Leistungsfähigkeit der jeweiligen Komponente beschreiben.

Weitere Informationen finden Sie im Dokument Intents und Intent-Filter.

Symbole und Labels

Einige Manifestelemente haben die Attribute icon und label, um Nutzern für die entsprechende App-Komponente jeweils ein kleines Symbol und ein Textlabel anzuzeigen.

In jedem Fall werden das Symbol und das Label, die in einem übergeordneten Element festgelegt sind, zum Standard. icon- und label-Wert für alle untergeordneten Elemente. Das Symbol und das Label, die im Element <application> festgelegt sind, sind beispielsweise das Standardsymbol und das Standardlabel für alle Komponenten der App, z. B. für alle Aktivitäten.

Das Symbol und das Label, die im Feld <intent-filter> werden dem Nutzer immer dann angezeigt, wenn diese Komponente eine Absicht erfüllen. Standardmäßig wird dieses Symbol von dem Symbol übernommen, das für die übergeordnete Komponente deklariert ist, also entweder vom Element <activity> oder <application>.

Vielleicht möchten Sie das Symbol für einen Intent-Filter, wenn er eine eindeutige Aktion bietet, die Sie im Feld Auswahldialogfeld. Weitere Informationen finden Sie unter Anderen Apps erlauben, Aktivitäten zu starten.

Berechtigungen

Android-Apps müssen die Erlaubnis zum Zugriff auf sensible Nutzerdaten wie Kontakte und SMS oder bestimmte Systemfunktionen wie die Kamera und den Internetzugriff anfordern. Jede Berechtigung wird durch ein eindeutiges Label gekennzeichnet. Eine App, die SMS senden muss, benötigt beispielsweise Folgendes: im Manifest hinzu:

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

Beginnend mit Unter Android 6.0 (API-Level 23) kann der Nutzer einige App-Berechtigungen zur Laufzeit genehmigen oder ablehnen. Aber Unabhängig davon, welche Android-Version von der App unterstützt wird, musst du alle Berechtigungsanfragen mit einem <uses-permission> -Element im Manifest. Wenn die Berechtigung erteilt wird, kann die App die geschützten Elemente Funktionen. Andernfalls schlagen die Versuche, auf diese Funktionen zuzugreifen, fehl.

Ihre App kann auch ihre eigenen Komponenten mit Berechtigungen schützen. Sie kann eine der von Android definierten Berechtigungen (wie in android.Manifest.permission aufgeführt) oder eine Berechtigung verwenden, die in einer anderen App deklariert wurde. Ihre App kann auch eigene Berechtigungen definieren. Eine neue Berechtigung wird mit dem <permission> -Elements.

Weitere Informationen finden Sie unter Berechtigungen unter Android.

Gerätekompatibilität

In der Manifestdatei können Sie auch angeben, welche Arten von Hardware- oder Softwarefunktionen Ihre App benötigt und damit auch, mit welchen Gerätetypen Ihre App kompatibel ist. Im Google Play Store können Nutzer Ihre App nicht auf Geräten installieren, die nicht die für Ihre App erforderlichen Funktionen oder die erforderliche Systemversion bieten.

Es gibt mehrere Manifest-Tags, mit denen definiert wird, auf welchen Geräten Ihre App installiert ist. kompatibel sind. Im Folgenden sind einige der häufigsten aufgeführt.

<uses-feature>

Mit dem Element <uses-feature> können Sie Hardware- und Softwarefunktionen deklarieren, die für Ihre App erforderlich sind. Wenn Ihre App beispielsweise die grundlegenden auf einem Gerät ohne Kompasssensor funktioniert, können Sie den Kompass wie erforderlich mit dem folgenden Manifest-Tag:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

Hinweis: Wenn Sie Ihre App auf Chromebooks verfügbar machen möchten, müssen Sie einige wichtige Einschränkungen bei Hardware- und Softwarefunktionen beachten. Weitere Informationen finden Sie unter Kompatibilität von App-Manifesten für Chromebooks

<uses-sdk>

Mit jeder nachfolgenden Plattformversion werden häufig neue APIs hinzugefügt, die in der vorherigen Version verfügbar waren. Um die Mindestversion anzugeben, die Ihre App hat kompatibel ist, muss dein Manifest das Tag <uses-sdk> enthalten und die minSdkVersion .

Beachten Sie jedoch, dass Attribute im Element <uses-sdk> durch entsprechende Eigenschaften in der Datei build.gradle überschrieben werden. Wenn Sie Android Studio verwenden, geben Sie also minSdkVersion und targetSdkVersion-Werte dort stattdessen:

Cool

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 21

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(21)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}

Weitere Informationen zur Datei build.gradle finden Sie unter Build konfigurieren.

Weitere Informationen dazu, wie du die Unterstützung deiner App für verschiedene Geräte deklarierst, finden Sie im Abschnitt Gerätekompatibilität .

Dateikonventionen

In diesem Abschnitt werden die Konventionen und Regeln beschrieben, die allgemein für alle Elemente und Attribute in der Manifestdatei gelten.

Elemente
Nur die <manifest> und <application> -Elemente sind erforderlich. Sie dürfen jeweils nur einmal vorkommen. Die meisten anderen Elemente können null oder mehrmals vorkommen. Einige von ihnen müssen vorhanden sein, damit die Manifestdatei nützlich ist.

Alle Werte werden über Attribute festgelegt, nicht als Zeichendaten innerhalb eines Elements.

Elemente auf derselben Ebene werden in der Regel nicht angeordnet. Beispiel: Der Parameter <activity>, <provider> und <service> -Elemente können in beliebiger Reihenfolge platziert werden. Es gibt zwei wichtige Ausnahmen von dieser Regel:

  • Ein <activity-alias> muss <activity> für das es ein Alias ist.
  • Das <application>-Element muss das letzte Element im <manifest>-Element sein.
Attribute
Technisch gesehen sind alle Attribute optional. Es gibt jedoch viele Attribute, muss angegeben werden, damit ein Element seinen Zweck erfüllen kann. Informationen zu wirklich optionalen Attributen finden Sie in der Referenzdokumentation. gibt die Standardwerte an.

Mit Ausnahme einiger Attribute des Stammelements <manifest> beginnen alle Attributnamen mit einem android:-Präfix, z. B. android:alwaysRetainTaskState. Da das Präfix universell ist, wird sie in der Dokumentation beim Verweisen auf Attribute weggelassen. nach Namen suchen.

Mehrere Werte
Wenn mehr als ein Wert angegeben werden kann, wird das Element fast immer und nicht mehrere Werte in einem Element. Ein Intent-Filter kann beispielsweise mehrere Aktionen auflisten:
<intent-filter ... >
    <action android:name="android.intent.action.EDIT" />
    <action android:name="android.intent.action.INSERT" />
    <action android:name="android.intent.action.DELETE" />
    ...
</intent-filter>
Ressourcenwerte
Für einige Attribute werden Werte angezeigt, die Nutzern angezeigt werden, z. B. den Titel einer Aktivität oder Ihr App-Symbol. Der Wert für diese Attribute kann je nach Sprache des Nutzers oder anderen Gerätekonfigurationen variieren (z. B. um eine andere Symbolgröße basierend auf der Pixeldichte des Geräts bereitzustellen). Daher sollten die Werte aus einer Ressource oder einem Design festgelegt werden, anstatt sie in die Manifestdatei hartcodiert zu werden. Der tatsächliche Wert kann sich dann je nach alternativen Ressourcen ändern, die Sie für verschiedene Gerätekonfigurationen angeben.

Ressourcen werden als Werte im folgenden Format ausgedrückt:

"@[package:]type/name"

Sie können den Namen package weglassen, wenn die Ressource von Ihrer App bereitgestellt wird. Das gilt auch, wenn sie von einer Bibliotheksabhängigkeit bereitgestellt wird, da Bibliotheksressourcen in Ihre eigenen Ressourcen einfließen. Der einzige andere gültige Paketname ist android, wenn Sie eine Ressource aus dem Android- Framework.

type ist ein Ressourcentyp, z. B. string oder drawable, und name der Name ist, der die spezifische Ressource identifiziert. Hier ein Beispiel:

<activity android:icon="@drawable/smallPic" ... >

Weitere Informationen zum Hinzufügen von Ressourcen zu Ihrem Projekt finden Sie unter App-Ressourcen – Übersicht

Wenn Sie stattdessen einen Wert anwenden möchten, der in einem Design definiert ist, muss das erste Zeichen ? anstelle von @ sein:

"?[package:]type/name"

Stringwerte
Wenn ein Attributwert ein String ist, verwenden Sie doppelte umgekehrte Schrägstriche (\\), um Zeichen zu maskieren, z. B. \\n für einen Zeilenumbruch oder \\uxxxx für ein Unicode-Zeichen.

Manifestelemente – Referenz

Die folgende Tabelle enthält Links zu den Referenzdokumenten für alle gültigen Elemente in der Datei AndroidManifest.xml.

<action> Fügt einem Intent-Filter eine Aktion hinzu.
<activity> Deklariert eine Aktivitätskomponente.
<activity-alias> Deklariert einen Alias für eine Aktivität.
<application> Deklariert die Anwendung.
<category> Fügt einem Intent-Filter einen Kategorienamen hinzu.
<compatible-screens> Gibt jede Bildschirmkonfiguration an, mit der die Anwendung kompatibel ist.
<data> Fügt einem Intent-Filter eine Datenspezifikation hinzu.
<grant-uri-permission> Gibt die Teilmengen der App-Daten an, auf die der übergeordnete Inhaltsanbieter zugreifen darf.
<instrumentation> Hiermit wird eine Instrumentation-Klasse deklariert, mit der Sie die Interaktion einer Anwendung mit dem System überwachen können.
<intent-filter> Gibt die Arten von Intents an, auf die eine Aktivität, ein Dienst oder ein Übertragungsempfänger reagieren kann.
<manifest> Das Stammelement der AndroidManifest.xml-Datei.
<meta-data> Ein Name/Wert-Paar für ein Element mit zusätzlichen beliebigen Daten, die der übergeordneten Komponente bereitgestellt werden können.
<path-permission> Hiermit werden der Pfad und die erforderlichen Berechtigungen für eine bestimmte Teilmenge von Daten bei einem Contentanbieter definiert.
<permission> Hiermit wird eine Sicherheitsberechtigung deklariert, mit der der Zugriff auf bestimmte Komponenten oder Funktionen dieser oder anderer Apps eingeschränkt werden kann.
<permission-group> Hier wird ein Name für eine logische Gruppierung ähnlicher Berechtigungen angegeben.
<permission-tree> Hier wird der Basisname für einen Berechtigungsbaum deklariert.
<provider> Deklariert eine Komponente des Contentanbieters.
<queries> Deklariert die anderen Apps, auf die Ihre App zugreifen möchte. Weitere Informationen im Leitfaden zur Paketsichtbarkeit filtern.
<receiver> Hier wird eine Broadcast-Empfängerkomponente deklariert.
<service> Deklariert eine Dienstkomponente.
<supports-gl-texture> Deklariert ein einzelnes GL-Texturkomprimierungsformat, das von der App unterstützt wird.
<supports-screens> Hiermit werden die Bildschirmgrößen deklariert, die von Ihrer App unterstützt werden, und der Bildschirmkompatibilitätsmodus für Bildschirme aktiviert, die größer sind als die von Ihrer App unterstützten.
<uses-configuration> Gibt bestimmte Eingabefunktionen an, die die Anwendung benötigt.
<uses-feature> Hier wird eine einzelne Hardware- oder Softwarefunktion deklariert, die von der Anwendung verwendet wird.
<uses-library> Gibt eine freigegebene Bibliothek an, mit der die Anwendung verknüpft werden muss.
<uses-native-library> Gibt eine vom Anbieter bereitgestellte native freigegebene Bibliothek an, mit der die App verknüpft werden muss.
<uses-permission> Gibt eine Systemberechtigung an, die der Nutzer erteilen muss, damit die App korrekt funktioniert.
<uses-permission-sdk-23> Gibt an, dass eine App eine bestimmte Berechtigung anfordert, aber nur, wenn sie auf einem Gerät mit Android 6.0 (API-Level 23) oder höher installiert ist.
<uses-sdk> Damit können Sie die Kompatibilität einer Anwendung mit einer oder mehreren Versionen der Android-Plattform anhand einer Ganzzahl auf API-Ebene angeben.

Beschränkungen

Für die folgenden Tags ist die Anzahl der Vorkommen in einer Manifestdatei begrenzt:

Tag-Name Limit
<package> 1000
<meta-data> 1000
<uses-library> 1000

Für die folgenden Attribute gilt eine maximale Länge:

Attribut Limit
name 1024
versionName 1024
host 255
mimeType 255

Beispiel für eine Manifestdatei

Die folgende XML-Datei ist ein einfaches AndroidManifest.xml-Beispiel, in dem deklariert wird, zwei Aktivitäten für die App.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0">

    <!-- Beware that these values are overridden by the build.gradle file -->
    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="26" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- This name is resolved to com.example.myapp.MainActivity
             based on the namespace property in the build.gradle file -->
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".DisplayMessageActivity"
            android:parentActivityName=".MainActivity" />
    </application>
</manifest>