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:
<activity>
für jede abgeleitete Klasse vonActivity
<service>
für jede abgeleitete Klasse vonService
<receiver>
für jede abgeleitete Klasse vonBroadcastReceiver
<provider>
für jede abgeleitete Klasse vonContentProvider
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 erfordert.
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.
- Elemente
- 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.
-
Ein
- 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äfixandroid:
. 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
oderdrawable
, 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>