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 den Android-Build-Tools, dem Android-Betriebssystem Google Play

In der Manifestdatei muss unter anderem Folgendes deklariert werden:

  • Die Komponenten der App, einschließlich aller Aktivitäten, Dienste, Sendern und Contentanbietern. Jede Komponente muss grundlegende wie 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 folgenden 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 finden Sie in einem der folgenden Abschnitte.

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 jedoch das erste Zeichen im Wert name ein Punkt ist, aus dem Namespace der App aus der Datei build.gradle auf Modulebene namespace wird dem Namen vorangestellt. Wenn der Namespace beispielsweise "com.example.myapp", wird der folgende Aktivitätsname aufgelöst in com.example.myapp.MainActivity:

<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 wird gestartet. 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 icon und label Attribute zum Anzeigen eines kleinen Symbols bzw. einer Textbeschriftung, für die entsprechende App-Komponente zu erstellen.

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. Zum Beispiel sind die Symbole und Beschriftungen <application> sind das Standardsymbol und das Standardlabel für jede Komponente 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 für die übergeordnete Komponente deklariert ist, entweder das <activity> oder <application>-Element.

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 eine Berechtigung anfordern, um auf vertrauliche Nutzerdaten zuzugreifen wie Kontakte und SMS oder bestimmte Systemfunktionen wie die Kamera- und Internetzugang. Jede Berechtigung ist 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 einer der von Android definierten Berechtigungen, wie in android.Manifest.permission oder eine Berechtigung die in einer anderen App deklariert ist. Ihre App kann auch eigene Berechtigungen definieren. Eine neue Berechtigung wird mit dem <permission> -Elements.

Weitere Informationen finden Sie unter Berechtigungen auf Android-Geräten

Eingeschränkte Gerätekompatibilität

In der Manifestdatei können Sie auch angeben, welche Hardware oder Softwarefunktionen, die für deine App erforderlich sind, und dadurch, welche Gerätetypen deine App benötigt kompatibel ist. Nutzer können deine App nicht im Google Play Store installieren auf Geräten, die nicht die Funktionen oder Systemversion haben, die Ihre App .

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>

Die <ph type="x-smartling-placeholder"></ph> <uses-feature> können Sie Hardware und Softwarefunktionen, die Ihre App benötigt. 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 ihr eure App auf Chromebooks verfügbar machen möchtet, Wichtige Einschränkungen von Hardware- und Softwarefunktionen die Sie berücksichtigen sollten. 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 <uses-sdk>-Element werden durch entsprechende Properties überschrieben. in der Datei build.gradle. 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 Übersicht.

Dateikonventionen

In diesem Abschnitt werden die Konventionen und Regeln beschrieben, die im Allgemeinen für alle und Attribute in der Manifestdatei.

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

Alle Werte werden durch Attribute festgelegt, nicht als Zeichendaten in ein Element.

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

  • Ein <activity-alias> muss <activity> für das es ein Alias ist.
  • Das <application>-Element muss das letzte Element im <manifest>-Element.
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 Stamms <manifest> beginnen, beginnen alle Attributnamen mit dem Präfix android:. 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 sich je nach Sprache des Nutzers oder anderen Gerätekonfigurationen (z. B. je nach Pixeldichte des Geräts eine unterschiedliche Symbolgröße, sodass das sollten aus einer Ressource oder einem Thema festgelegt und nicht in der Manifestdatei. Der tatsächliche Wert kann sich dann je nach alternativer Ressourcen, die Sie für verschiedene Gerätekonfigurationen bereitstellen.

Ressourcen werden als Werte im folgenden Format ausgedrückt:

"@[package:]type/name"

Sie können den Namen package weglassen, wenn die Ressource von Ihrem (auch wenn sie durch eine Bibliotheksabhängigkeit bereitgestellt wird, weil Bibliotheksressourcen mit Ihrem Konto zusammengeführt. 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

Um stattdessen einen Wert anzuwenden, der in einem theme definiert ist, wird das erste Zeichen muss ? 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.

Verweis auf Manifestelemente

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 App 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 Contentanbieter zugreifen darf.
<instrumentation> Deklariert eine Instrumentation-Klasse, 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 Datei AndroidManifest.xml.
<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> Definiert den Pfad und die erforderlichen Berechtigungen für eine bestimmte Teilmenge von Daten innerhalb eines Contentanbieters.
<permission> Deklariert eine Sicherheitsberechtigung, mit der der Zugriff auf bestimmte Komponenten oder Funktionen dieser oder anderer Apps eingeschränkt werden kann.
<permission-group> Gibt einen Namen für eine logische Gruppierung zusammengehöriger Berechtigungen an.
<permission-tree> Deklariert den Basisnamen für eine Baumstruktur von Berechtigungen.
<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> Deklariert eine Komponente für einen Übertragungsempfänger.
<service> Deklariert eine Dienstkomponente.
<supports-gl-texture> Deklariert ein einzelnes GL-Texturkomprimierungsformat, das von der App unterstützt wird.
<supports-screens> Deklariert die Bildschirmgrößen, die Ihre App unterstützt, und aktiviert den Bildschirmkompatibilitätsmodus für Bildschirme, die größer als die von Ihrer App unterstützten Bildschirme sind.
<uses-configuration> Gibt bestimmte Eingabefunktionen an, die die Anwendung benötigt.
<uses-feature> Gibt eine einzelne Hardware- oder Softwarefunktion an, die von der Anwendung verwendet wird.
<uses-library> Gibt eine gemeinsam genutzte Bibliothek an, mit der die Anwendung verknüpft werden muss.
<uses-native-library> Gibt eine vom Anbieter bereitgestellte native gemeinsam genutzte 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> Hiermit können Sie die Kompatibilität einer Anwendung mit einer oder mehreren Versionen der Android-Plattform mithilfe einer Ganzzahl auf API-Ebene zum Ausdruck bringen.

Beschränkungen

Bei den folgenden Tags ist die Anzahl der Wiederholungen in einer Manifestdatei begrenzt:

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

Die maximale Länge der folgenden Attribute ist begrenzt:

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>