Android-Apps können mit Kotlin, der Programmiersprache Java und C++ geschrieben werden. Die Android SDK-Tools kompilieren zusammen mit allen Daten- und Ressourcendateien in ein APK oder Android App Bundle umwandeln.
Ein Android-Paket, eine Archivdatei mit dem Suffix .apk
, enthält
die Inhalte einer Android-App, die zur Laufzeit erforderlich sind, und die Datei, die von Android
auf welchen Geräten die App installiert wird.
Ein Android App Bundle, eine Archivdatei mit dem Suffix .aab
, enthält
eines Android-App-Projekts, einschließlich einiger zusätzlicher Metadaten, die im
Laufzeit. Ein AAB ist ein Veröffentlichungsformat und kann nicht auf Android-Geräten installiert werden. Es
die APK-Generierung und -Signatur auf eine spätere Phase hinaus verschiebt.
Beim Vertrieb Ihrer App über Google Google Play generieren. Die Server von Google Play generieren beispielsweise optimierte APKs, die nur die Ressourcen und Code, der von dem Gerät benötigt wird, das die Installation der App anfordert.
Jede Android-App hat ihre eigene Sicherheits-Sandbox, die durch die folgenden Android-Sicherheitsfunktionen:
- Das Betriebssystem Android ist ein Linux-System für mehrere Nutzer, bei dem jede App Nutzenden zu verstehen.
- Standardmäßig weist das System jeder App eine eindeutige Linux-Nutzer-ID zu, die nur von und der App nicht bekannt ist. Das System legt Berechtigungen für alle Dateien in einer App verwenden, sodass nur die dieser App zugewiesene User-ID darauf zugreifen kann.
- Jeder Prozess hat seine eigene virtuelle Maschine (VM), sodass der Code einer Anwendung isoliert von anderen Apps.
- Standardmäßig wird jede App in einem eigenen Linux-Prozess ausgeführt. Das Android-System startet des Prozesses, wenn müssen die Komponenten der App ausgeführt werden. Danach wird der Prozess beendet. wenn es nicht mehr oder wenn das System Arbeitsspeicher für andere Apps freigeben muss.
Das Android-System implementiert das Prinzip der geringsten Berechtigung. Das heißt: hat jede App standardmäßig nur Zugriff auf die Komponenten, die sie für ihre Arbeit benötigt. nicht mehr. Dies schafft eine sehr sichere Umgebung, in der eine App nicht auf Teile der für das System keine Berechtigung erteilt wurde.
Eine App hat jedoch die Möglichkeit, mit anderen Apps und für eine App auf Systemdienste zugreifen:
- Es ist möglich, für zwei Apps dieselbe Linux-Nutzer-ID zu verwenden. In diesem Fall auf die Dateien des jeweils anderen zugreifen. Um Systemressourcen zu schonen, werden Anwendungen mit der und dieselbe Nutzer-ID auch im selben Linux-Prozess ausgeführt werden und dieselbe VM nutzen. Die Apps müssen mit demselben Zertifikat signiert sein.
- Eine App kann die Berechtigung anfordern, auf Gerätedaten zuzugreifen, z. B. auf die Standort, Kamera und Bluetooth-Verbindung. Der Nutzer hat explizit zu gewähren. Weitere Informationen zu Berechtigungen finden Sie unter Berechtigungen auf Android-Geräten
Im weiteren Verlauf dieses Dokuments werden die folgenden Konzepte vorgestellt:
- Die zentralen Framework-Komponenten, die Ihre App definieren.
- Die Manifestdatei, in der Sie die Komponenten und das erforderliche Gerät deklarieren Funktionen für Ihr
- Ressourcen, die vom App-Code getrennt sind und mit denen Ihre App sein Verhalten für eine Vielzahl von Gerätekonfigurationen zu optimieren.
App-Komponenten
App-Komponenten sind die Grundbausteine einer Android-App. Jedes Komponente ist ein Einstiegspunkt, über den das System oder ein Nutzer auf Ihre App zugreifen kann. Einige Komponenten voneinander abhängig sind.
Es gibt vier Arten von App-Komponenten:
- Aktivitäten
- Dienste
- Übertragungsempfänger
- Contentanbieter
Jeder Typ erfüllt einen bestimmten Zweck und hat einen eigenen Lebenszyklus, der definiert, wie eine Komponente erstellt und zerstört wird. In den folgenden Abschnitten werden die vier Arten von App-Komponenten beschrieben.
- Aktivitäten
- Eine Aktivität ist der Einstiegspunkt für die Interaktion mit dem Nutzer. Es repräsentiert eine einzelne
mit einer Benutzeroberfläche. Beispiel:
kann eine E-Mail-App eine Aktivität haben,
in der eine Liste neuer
E-Mails, eine weitere Aktivität zum Schreiben einer E-Mail und eine weitere Aktivität zum Lesen von E-Mails. Obwohl
die Aktivitäten zusammenwirken, um eine kohärente User Experience in der E-Mail-App zu bilden, jede einzelne
ist unabhängig von den anderen.
Eine andere App kann eine dieser Aktionen starten Aktivitäten, wenn die E-Mail-App dies zulässt. Eine Kamera-App kann beispielsweise Aktivitäten in der E-Mail-App zum Schreiben einer neuen E-Mail, damit der Nutzer ein Bild teilen kann.
Eine Aktivität ermöglicht die folgenden wichtigen Interaktionen zwischen System und App:
- Verfolgung dessen, was dem Nutzer aktuell wichtig ist – was auf dem Bildschirm zu sehen ist –, damit die Nutzer das System den Prozess ausführt, in dem die Aktivität gehostet wird.
- Wissen, welche zuvor verwendeten Prozesse beendete Aktivitäten enthalten, zu denen der Nutzer möglicherweise zurückkehren könnte und priorisieren Sie diese Prozesse, um sie verfügbar zu halten.
- Beendigung des Prozesses der App, damit der Nutzer zu den Aktivitäten zurückkehren kann wobei der vorherige Zustand wiederhergestellt wurde.
- Apps müssen die Möglichkeit bieten, Nutzerflüsse untereinander zu implementieren, sodass das System Nutzerflüsse implementieren kann. Abläufe zu koordinieren. Das wichtigste Beispiel dafür ist die Freigabe.
Sie implementieren eine Aktivität als Unterklasse der
Activity
-Klasse. Weitere Informationen Informationen zur KlasseActivity
finden Sie unter Einführung in Aktivitäten. - Dienste
- Ein Dienst ist ein allgemeiner Einstiegspunkt, mit dem eine App im Hintergrund ausgeführt wird
aus den verschiedensten Gründen. Es handelt sich um eine Komponente, die im Hintergrund für eine lange Laufzeit ausgeführt wird.
für Vorgänge oder für Remote-Prozesse. Ein Dienst stellt keine Benutzeroberfläche zur Verfügung.
Für Beispiel: Ein Dienst spielt Musik im Hintergrund ab, während sich der Nutzer in einer anderen App befindet. Daten können über das Netzwerk abgerufen werden, ohne die Nutzerinteraktion mit einer Aktivität zu blockieren. Anderes wie z. B. eine Aktivität, den Dienst starten und ausführen lassen oder damit interagieren.
Es gibt zwei Arten von Diensten, die dem System mitteilen, wie eine App verwaltet werden soll: gestartete Dienste und gebundenen Diensten.
Bei gestarteten Diensten wird das System angewiesen, die Dienste weiter auszuführen, bis die Arbeit abgeschlossen ist. Dabei kann es sich um die Synchronisierung einiger Daten im Hintergrund oder die Wiedergabe von Musik handeln, auch nachdem der Nutzer die App verlassen hat. Die Synchronisierung von Daten im Hintergrund oder die Wiedergabe von Musik stellen verschiedene Arten von gestarteten , die vom System anders behandelt werden:
- Die Musikwiedergabe ist dem Nutzer direkt bewusst und die App informiert die Nutzer indem es angibt, dass es sich im Vordergrund befinden soll, und eine entsprechende Benachrichtigung für den Nutzer. In diesem Fall priorisiert das System die Beibehaltung der ausgeführt wird, da die Nutzererfahrung schlecht ist, wenn der Prozess verschwindet.
- Ein regulärer Hintergrunddienst ist dem Nutzer nicht direkt bewusst. hat das System bei der Prozessverwaltung mehr Spielraum. Er könnte ihn töten lassen, Startet den Dienst später neu, wenn er RAM für komplexere Vorgänge benötigt. unmittelbare Bedenken zu haben.
Gebundene Dienste werden ausgeführt, weil eine andere App (oder das System) angegeben hat, dass das . Ein gebundener Dienst stellt eine API für einen anderen Prozess bereit und das System dass es zwischen diesen Prozessen Abhängigkeiten gibt. Wenn also Prozess A an einen Dienst in Prozess B ausgeführt wird, weiß das System, dass es Prozess B und seinen Dienst für A weiterlaufen muss. Wenn zudem ist Prozess A etwas, das den Nutzenden wichtig ist, dann weiß er, die für die Nutzenden wichtig sind.
Aufgrund ihrer Flexibilität sind Dienste nützlich, für alle möglichen übergeordneten Systemkonzepte. Live-Hintergründe, Benachrichtigungen Hörer, Bildschirmschoner, Eingabemethoden, Bedienungshilfen und viele andere wichtige Systemfunktionen werden alle als Dienste erstellt, die von Anwendungen implementiert werden, an die sich das System bei der Ausführung gebunden.
Ein Dienst wird als abgeleitete Klasse von
Service
implementiert. Weitere Informationen zur KlasseService
finden Sie unter Übersicht über die Dienste.Hinweis:Wenn Ihre App auf Android 5.0 (API-Level 21) oder höher ausgerichtet ist, Verwenden Sie die Klasse
JobScheduler
, um Aktionen zu planen. JobScheduler verfügt über die Vorteil des Akkuverbrauchs, indem Jobs optimal geplant werden, um den Energieverbrauch zu senken und mit der Doze API arbeiten. Weitere Informationen zur Verwendung dieser Klasse finden Sie in derJobScheduler
. in der Referenzdokumentation. - Broadcastempfänger
- Ein Sendeempfänger ist eine Komponente, mit der das System Ereignisse an den
App außerhalb des normalen User Flows, damit sie auf systemweite Broadcasts reagieren kann
Ankündigungen. Da Übertragungsempfänger ein weiterer klar definierter Eintrag in der App sind, wird das System
kann Broadcasts auch an Apps senden, die derzeit nicht ausgeführt werden.
Eine App kann beispielsweise einen Alarm einrichten, um eine Benachrichtigung zu posten, um den Nutzer über ein bevorstehendes Ereignis zu informieren. Da der Alarm an ein
BroadcastReceiver
in der App gesendet wird, muss die App nicht aktiv bleiben, bis der Alarm ertönt.Viele Broadcasting-Nachrichten stammen vom System, der Akkustand niedrig ist oder ein Bild aufgenommen wird. Apps können auch Broadcasts initiieren, um beispielsweise anderen Apps mitzuteilen, werden einige Daten auf das Gerät heruntergeladen und stehen ihnen zur Verfügung.
Obwohl Übertragung Bei Empfängern wird keine Benutzeroberfläche angezeigt. Sie können eine Benachrichtigung in der Statusleiste erstellen. , um den Nutzer zu benachrichtigen, wenn ein Broadcast-Ereignis stattfindet. Häufiger ist ein Übertragungsempfänger lediglich ein Gateway zu anderen Komponenten und ist darauf ausgelegt, sehr wenig Arbeit zu leisten.
Beispielsweise kann ein Übertragungsempfänger einen
JobService
so planen, dass er einige Arbeitsschritte für ein Ereignis mitJobScheduler
. Bei Empfängern von Nachrichtensendungen interagieren oft Apps miteinander. Daher ist es wichtig, sich der möglichen Auswirkungen auf die Sicherheit auswirken.Ein Übertragungsempfänger wird als abgeleitete Klasse von
BroadcastReceiver
implementiert. und jede Übertragung wird alsIntent
-Objekt gesendet. Weitere Informationen sehen Sie sich die KlasseBroadcastReceiver
an. - Contentanbieter
- Ein Contentanbieter verwaltet einen freigegebenen Satz von App-Daten, in denen Sie Daten speichern können.
im Dateisystem, in einer SQLite-Datenbank, im Web oder in einem anderen nichtflüchtigen Speicher
Standort, an dem Ihr
auf die die App zugreifen kann. Über den Contentanbieter können andere Apps
die Daten, wenn der Contentanbieter dies zulässt.
Beispielsweise stellt das Android-System Inhalte zur Verfügung, Anbieter, der die Kontaktdaten des Nutzers verwaltet. Jede App mit der richtigen Contentanbieter abfragen können, z. B. anhand von Berechtigungen
ContactsContract.Data
, zum Lesen und Schreiben von Informationen über für eine bestimmte Person.Es ist verlockend, Contentanbieter als Abstraktion einer Datenbank zu betrachten, API und Support für diesen häufigen Fall integriert. Sie unterscheiden sich jedoch Hauptzweck im Hinblick auf das Systemdesign.
Für das System ist ein Contentanbieter ein Einstiegspunkt in eine App zum Veröffentlichen benannter Datenelemente, die durch ein URI-Schema identifiziert werden. So kann eine App entscheiden, wie sie die darin enthaltenen Daten einem URI-Namespace, sodass diese URIs an andere Entitäten übergeben werden, die sie wiederum für den Zugriff auf die Daten. Dadurch kann das System eine bestimmte App verwalten:
- Wenn Sie einen URI zuweisen, muss die Anwendung nicht weiter ausgeführt werden. URIs bleiben also bestehen, nachdem ihre beenden. Das System muss nur sicherstellen, dass eine Eigentümer-App wird weiterhin ausgeführt, wenn die App-Daten aus dem entsprechenden URI abgerufen werden.
- Diese URIs bieten auch ein wichtiges, detailliertes Sicherheitsmodell. Beispiel: App kann den URI für ein Bild in der Zwischenablage platzieren, den Inhalt aber beibehalten Anbieter gesperrt, damit andere Apps nicht darauf zugreifen können. Wenn eine zweite App versucht, um auf diesen URI in der Zwischenablage zuzugreifen, kann das System dieser App Mit einer temporären Erteilung von URI-Berechtigungen auf die Daten zugreifen sodass nur auf die Daten hinter diesem URI und auf sonst nichts in der zweiten App zugegriffen wird.
Contentanbieter eignen sich auch zum Lesen und Schreiben von privaten Daten und nicht geteilt.
Ein Contentanbieter wird als abgeleitete Klasse von
ContentProvider
implementiert. Außerdem muss ein Standardsatz von APIs implementiert werden, die es anderen Apps ermöglichen, Transaktionen. Weitere Informationen erhalten Sie vom Entwickler von Contentanbietern. .
Ein besonderer Aspekt des Android-Systemdesigns besteht darin, dass jede App eine neue App-Komponente hinzu. Wenn Sie z. B. möchten, dass die Nutzenden gibt es wahrscheinlich eine andere App, mit der du das Foto machen kannst. App verwenden können, anstatt eine Aktivität zu entwickeln, um selbst ein Foto aufzunehmen. Das solltest du nicht tun den Code der Kamera-App integrieren oder sogar verlinken müssen. Sie können stattdessen eine Aktivität in der Kamera-App starten, Foto. Wenn der Vorgang abgeschlossen ist, wird das Foto an die App zurückgesendet, damit Sie es verwenden können. Für den Nutzer: Es sieht so aus, als wäre die Kamera Teil Ihrer App.
Wenn das System eine Komponente startet, startet es den Prozess für diese App, falls nicht
bereits ausgeführt wird, und instanziiert die für die Komponente erforderlichen Klassen. Wenn zum Beispiel
die Aktivität in der Kamera-App startet, die ein Foto aufnimmt,
wird in dem Prozess ausgeführt, der zur Kamera-App gehört, nicht im Prozess Ihrer App.
Daher haben Android-Apps im Gegensatz zu den meisten anderen Systemen
Punkt: Es gibt keine main()
-Funktion.
Da das System jede Anwendung in einem separaten Prozess mit Dateiberechtigungen ausführt, den Zugriff auf andere Apps einschränken, kann Ihre App Komponenten nicht direkt aktivieren eine andere App. Das Android-System kann dies jedoch tun. Um eine Komponente in eine andere App verwenden, übermitteln Sie eine Nachricht an das System, die Ihre Absicht angibt, um eine bestimmte Komponente zu starten. Das System aktiviert dann die Komponente für Sie.
Komponenten aktivieren
Eine asynchrone Nachricht, die als Intent bezeichnet wird, aktiviert drei der vier Komponententypen: Aktivitäten, Dienste und von Rundfunkempfängern. Intents binden einzelne Komponenten zur Laufzeit aneinander. Sie können Ihnen einfallen, als Übermittler, die eine Aktion von anderen Komponenten anfordern, unabhängig davon, ob die Komponente zu eurer App oder einer anderen App.
Ein Intent wird mit einem Intent
-Objekt erstellt, das eine Nachricht für
Aktivieren Sie entweder eine bestimmte Komponente (einen expliziten Intent) oder einen bestimmten Komponententyp.
(ein impliziter Intent).
Bei Aktivitäten und Dienstleistungen definiert der Intent die auszuführende Aktion, z. B. ansehen oder send etwas und kann unter anderem den URI der Daten angeben, auf die reagiert werden soll. die Sie möglicherweise kennen müssen.
Ein Intent kann z. B. eine Anfrage für ein
um ein Bild anzuzeigen oder eine Webseite zu öffnen. In einigen Fällen können Sie
um ein Ergebnis zu erhalten. In diesem Fall
Ergebnis in einem Intent
. Sie können auch einen Intent ausgeben,
wählt der Nutzer einen persönlichen Kontakt aus und sendet diesen an Sie zurück. Der Rückgabe-Intent enthält einen
URI, der auf den ausgewählten Kontakt verweist.
Bei Übertragungsempfängern definiert der Intent den Broadcast-Ankündigung. Zum Beispiel eine Nachricht, die angibt, dass der Akku des Geräts schwach ist enthält nur einen bekannten Aktionsstring, der auf einen niedrigen Akkustand hinweist.
Im Gegensatz zu Aktivitäten, Diensten und Übertragungsempfängern sind Contentanbieter
aktiviert, wenn das Targeting von einer Anfrage von einem ContentResolver
erfolgt. Inhalt
alle direkten Transaktionen mit dem Contentanbieter und der Komponente
Ausführen von Transaktionen mit den Anbieter-Methoden
auf dem
ContentResolver
-Objekt. So entsteht aus Sicherheitsgründen eine Abstraktionsebene zwischen
Contentanbieter und die Komponente, die Informationen anfordert.
Die einzelnen Komponententypen können auf unterschiedliche Weise aktiviert werden:
- Sie können eine Aktivität starten oder ihr eine neue Aufgabe zuweisen, indem Sie
Intent
anstartActivity()
übergeben Wenn die Aktivität ein Ergebnis zurückgeben soll,startActivityForResult()
- Unter Android 5.0 (API-Level 21) und höher können Sie
JobScheduler
, um Aktionen zu planen. Bei älteren Android-Versionen können Sie oder einem fortlaufenden Dienst neue Anweisungen geben, übergibtIntent
anstartService()
. Sie können eine Bindung an den Dienst erstellen, indem SieIntent
anbindService()
. - Sie können eine Übertragung starten, indem Sie ein
Intent
an Methoden wie folgenden übergeben:sendBroadcast()
odersendOrderedBroadcast()
- Sie können eine Anfrage an einen Contentanbieter durchführen, indem Sie Folgendes aufrufen:
query()
amContentResolver
.
Weitere Informationen zur Verwendung von Intents finden Sie im Artikel Intents und
Intent-Filter.
Die folgenden Dokumente enthalten weitere Informationen zum Aktivieren bestimmter Komponenten:
Einführung in Aktivitäten
Überblick über die Dienste,
BroadcastReceiver
und
Contentanbieter:
Die Manifestdatei
Bevor das Android-System eine App-Komponente starten kann, muss das System wissen, dass die
Komponente existiert, indem Sie die Manifestdatei AndroidManifest.xml
der App lesen.
Ihre App deklariert alle ihre Komponenten in dieser Datei, die sich im Stammverzeichnis der
App-Projektverzeichnis.
Neben der Deklaration der App-Komponenten funktioniert das Manifest einiges. wie zum Beispiel:
- Ermittelt alle Nutzerberechtigungen, die die App benötigt, z. B. Internetzugriff oder Lesezugriff auf die Kontakte des Nutzers.
- Deklariert das Minimum API-Level die für die App erforderlich sind, je nachdem, welche APIs sie verwendet.
- die von der App genutzte oder erforderliche Hardware- und Softwarefunktionen deklariert, z. B. eine Kamera, Bluetooth-Dienste oder Multi-Touchscreen
- Deklariert API-Bibliotheken, mit denen die App verknüpft werden muss (mit Ausnahme des Android-Frameworks) APIs) wie die Google Maps-Bibliothek.
Komponenten deklarieren
Die Hauptaufgabe des Manifests besteht darin, das System über die Komponenten der App zu informieren. Für Eine Manifestdatei kann eine Aktivität beispielsweise so deklarieren:
<?xml version="1.0" encoding="utf-8"?> <manifest ... > <application android:icon="@drawable/app_icon.png" ... > <activity android:name="com.example.project.ExampleActivity" android:label="@string/example_label" ... > </activity> ... </application> </manifest>
Im <application>
verweist das Attribut android:icon
auf Ressourcen für ein Symbol, das den
Im <activity>
-Element
Das Attribut android:name
gibt den vollständig qualifizierten Klassennamen des
Activity
und die
Das Attribut android:label
gibt einen String an
das als für den Nutzer sichtbares Label für die Aktivität verwendet wird.
Sie müssen alle App-Komponenten mithilfe der folgenden Elemente deklarieren:
<activity>
-Elemente für Aktivitäten<service>
-Elemente für Dienste<receiver>
-Elemente für Übertragungsempfänger<provider>
-Elemente für Contentanbieter
Aktivitäten, Dienstleistungen und Contentanbieter, die Sie in Ihre Quelle aufnehmen, aber nicht deklarieren
im Manifest sind für das System nicht sichtbar und können daher nicht ausgeführt werden. Sie können jedoch
Nachricht an alle
Empfänger können entweder im Manifest deklariert oder dynamisch im Code erstellt werden:
BroadcastReceiver
-Objekten erstellt und beim System registriert, indem Sie
registerReceiver()
.
Weitere Informationen zum Strukturieren der Manifestdatei für Ihre App finden Sie unter App-Manifest-Übersicht.
Komponentenfunktionen deklarieren
Wie im Abschnitt Komponenten aktivieren erläutert, können Sie
Intent
, um Aktivitäten, Dienste und Übertragungsempfänger zu starten.
Sie tun das
indem Sie die Zielkomponente im Intent explizit benennen, indem Sie den Namen der Komponentenklasse verwenden.
Sie können auch einen impliziten Intent verwenden,
beschreibt die Art der auszuführenden Aktion und optional die Daten, die Sie ausführen möchten.
die Aktion ausführen soll. Bei einem impliziten Intent kann das System eine Komponente auf dem Gerät finden
die die
und starten Sie sie. Wenn es mehrere Komponenten gibt, die die im
Intent auswählen, wählt der Nutzer aus, welcher verwendet werden soll.
Achtung:Wenn Sie einen Intent zum Starten eines
Service
, achte darauf, dass deine App sicher ist. Verwende dazu eine
explizit
die Nutzerabsicht verstehen. Die Verwendung eines impliziten Intents zum Starten eines Dienstes
Sicherheitsrisiko, weil Sie unsicher sind,
welcher Dienst auf den Intent reagiert,
und der Nutzer kann nicht sehen,
welcher Dienst gestartet wird. Ab Android 5.0 (API-Level 21) wird das System
löst eine Ausnahme aus, wenn Sie bindService()
aufrufen
mit einer impliziten Absicht. Deklarieren Sie keine Intent-Filter für Ihre Dienste.
Das System identifiziert die Komponenten, die auf einen Intent reagieren können, indem es die Intent an die Intent-Filter, die in der Manifestdatei anderer Apps auf auf dem Gerät.
Wenn Sie eine Aktivität im Manifest Ihrer App deklarieren, können Sie diese optional
Intent-Filter, die die Funktionen der Aktivität deklarieren, damit sie auf Intents reagieren kann
aus anderen Apps. Sie tun dies durch
Hinzufügen eines <intent-filter>
-Elements als untergeordnetes Element des Deklarationselements der Komponente
Wenn Sie beispielsweise eine E-Mail-App mit einer Aktivität zum Schreiben einer neuen E-Mail erstellen, können Sie Deklarieren Sie einen Intent-Filter für die Antwort auf „Senden“ eine neue E-Mail senden möchten, Dies wird im folgenden Beispiel gezeigt:
<manifest ... > ... <application ... > <activity android:name="com.example.project.ComposeEmailActivity"> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="*/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
Wenn eine andere App einen Intent mit der Aktion ACTION_SEND
erstellt und an
startActivity()
,
startet das System möglicherweise Ihre Aktivität,
damit der Nutzer eine E-Mail an
E-Mail.
Weitere Informationen zum Erstellen von Intent-Filtern finden Sie im Dokument Intents und Intent-Filter.
App-Anforderungen deklarieren
Es gibt eine Vielzahl von Android-Geräten, die nicht alle Funktionen verfügbar sind. Um zu verhindern, dass Ihre App auf Geräten installiert wird fehlende Funktionen, die Ihre App benötigt, ist es wichtig, dass Sie ein Profil für die von Ihrer App unterstützten Gerätetypen unterstützt, indem Sie Geräte- und Softwareanforderungen in Ihrem Manifestdatei.
Die meisten dieser Angaben dienen nur zur Information. Das System liest keine Sie werden jedoch von externen Diensten wie Google Play gelesen, um Filter zu bieten. wenn Nutzer auf ihrem Gerät nach Apps suchen.
Angenommen, Ihre App benötigt eine Kamera und verwendet APIs, die mit Android 8.0 (API-Ebene 26) eingeführt wurden.
Sie müssen diese Anforderungen erklären.
Die Werte für minSdkVersion
und targetSdkVersion
werden festgelegt in
in die Datei build.gradle
deines App-Moduls ein:
android { ... defaultConfig { ... minSdkVersion 26 targetSdkVersion 29 } }
Hinweis: Legen Sie minSdkVersion
und
targetSdkVersion
direkt in der Manifestdatei, da
werden sie während des Build-Prozesses von Gradle überschrieben. Weitere Informationen finden Sie unter
Anforderungen an das API-Level festlegen
Sie deklarieren die Kamerafunktion in der Manifestdatei Ihrer App:
<manifest ... > <uses-feature android:name="android.hardware.camera.any" android:required="true" /> ... </manifest>
Mit den Angaben in diesen Beispielen werden Geräte, die kein
oder eine
Mit Android-Versionen älter als 8.0 kann deine App nicht über Google Play installiert werden.
Sie können aber auch erklären, dass Ihre App zwar die Kamera verwendet,
müssen. Dazu legen Sie den required
fest.
Attribut auf false
setzen, prüfen Sie während der Laufzeit, ob
das Gerät über eine Kamera verfügt und alle Kamerafunktionen bei Bedarf deaktiviert werden.
Weitere Informationen dazu, wie du die Kompatibilität deiner App mit verschiedenen Geräten verwalten kannst finden Sie in der Übersicht zur Gerätekompatibilität.
App-Ressourcen
Eine Android-App besteht nicht nur aus Code. Es erfordert Ressourcen, die vom Quellcode getrennt werden, wie z. B. Bilder, Audiodateien und alles, was mit dem visuellen Präsentation der App. Sie können z. B. Animationen, Menüs, Stile, Farben, und das Layout der Benutzeroberflächen für Aktivitäten mit XML-Dateien.
App-Ressourcen machen es einfach, um verschiedene Eigenschaften Ihrer App zu aktualisieren, ohne den Code zu ändern. Wird bereitgestellt mit alternativen Ressourcen, mit denen Sie Ihre App für eine Vielzahl von z. B. unterschiedliche Sprachen und Bildschirmgrößen.
Für jede Ressource, die Sie in Ihr Android-Projekt aufnehmen, definieren die SDK-Build-Tools eine eindeutige
Ganzzahl-ID, mit der Sie in Ihrem App-Code oder in Ihrem App-Code auf die Ressource verweisen können
anderen in XML definierten Ressourcen. Wenn Ihre App beispielsweise eine Bilddatei mit dem Namen
logo.png
(im Verzeichnis res/drawable/
gespeichert), generieren die SDK-Tools
Ressourcen-ID mit dem Namen R.drawable.logo
. Diese ID ist einer anwendungsspezifischen Ganzzahl zugeordnet,
können Sie auf das Bild verweisen und es in Ihre Benutzeroberfläche einfügen.
Einer der wichtigsten Aspekte bei der Bereitstellung von Ressourcen außerhalb des Quellcodes ist die Möglichkeit, für verschiedene Geräte alternative Ressourcen anzubieten. Konfigurationen.
Wenn Sie beispielsweise UI-Strings in XML definieren, können Sie
die Zeichenfolgen in andere
Sprachen und speichern Sie diese
Zeichenfolgen in separaten Dateien. Dann wendet Android die
entsprechende Sprachzeichenfolgen
basierend auf einem Sprachqualifier mit Ihrer UI.
die Sie an den Namen des Ressourcenverzeichnisses anhängen, z. B. res/values-fr/
für einen französischen String
und die Spracheinstellung des Nutzers.
Android unterstützt viele Qualifier für alternative Ressourcen. Die qualifier ist ein kurzer String, den Sie in den Namen Ihres Ressourcenverzeichnisses einfügen, Gerätekonfiguration festlegen, für die diese Ressourcen verwendet werden.
Für Sie können z. B. unterschiedliche Layouts für Ihre Aktivitäten erstellen, je nachdem, Bildschirmausrichtung und -größe anpassen. Bei Hochformat (groß) Ausrichtung verwenden, möchten Sie vielleicht ein Layout mit vertikal angeordneten Schaltflächen, aber wenn sich der Bildschirm im Querformat (breit) verwenden, können Sie die Schaltflächen horizontal ausrichten. So ändern Sie das Layout: je nach Ausrichtung können Sie zwei Layouts definieren und die den Verzeichnisnamen jedes Layouts an. Dann wendet das System automatisch die entsprechenden an die aktuelle Geräteausrichtung anpassen.
Weitere Informationen zu den verschiedenen Arten von Ressourcen, die Sie in Ihre Bewerbung aufnehmen können, und dazu, wie Sie alternative Ressourcen für unterschiedliche Gerätekonfigurationen erstellen können, finden Sie in der Übersicht über App-Ressourcen. Bis mehr über Best Practices und das Entwickeln zuverlässiger Apps in Produktionsqualität erfahren. Weitere Informationen finden Sie im Leitfaden zur Anwendungsarchitektur.
Weitere Informationen
Informationen zur Android-Entwicklung mithilfe von Videos und Code-Tutorials findest du in der Android-Apps mit Kotlin entwickeln Udacity-Kurs.
Lesen Sie weiter zu:
- Intents und Intent-Filter
- Hier erfahren Sie, wie Sie die
Intent
APIs für folgende Zwecke verwenden: App-Komponenten wie Aktivitäten und Dienste zu aktivieren und App-Komponenten zu erstellen die von anderen Apps verwendet werden können. - Einführung in Aktivitäten
- Hier erfahren Sie, wie Sie eine Instanz der Klasse
Activity
erstellen. Dadurch wird Ihre Anwendung mit einer Benutzeroberfläche klar erkennbar. - App-Ressourcen – Übersicht
- Hier erfährst du, wie Android-Apps so strukturiert sind, dass sie App-Ressourcen von den App-Code, einschließlich der Frage, wie du alternative Ressourcen für bestimmte Geräte bereitstellen kannst Konfigurationen.
Außerdem von Interesse:
- Gerätekompatibilität – Übersicht
- Hier erfährst du, wie Android auf verschiedenen Gerätetypen und wie du deine App für jedes Gerät optimieren oder ihre Verfügbarkeit einschränken kannst auf verschiedenen Geräten.
- Berechtigungen auf Android-Geräten
- So schränkt Android den App-Zugriff auf bestimmte APIs mit einer Berechtigung ein System, das die Einwilligung des Nutzers zur Verwendung dieser APIs durch Ihre App erfordert.