Anwendungsgrundlagen

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 Klasse Activity 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 Klasse Service 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 der JobScheduler. 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 mit JobScheduler. 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 als Intent-Objekt gesendet. Weitere Informationen sehen Sie sich die Klasse BroadcastReceiver 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 an startActivity() ü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, übergibt Intent an startService(). Sie können eine Bindung an den Dienst erstellen, indem Sie Intent an bindService().
  • Sie können eine Übertragung starten, indem Sie ein Intent an Methoden wie folgenden übergeben: sendBroadcast() oder sendOrderedBroadcast()
  • Sie können eine Anfrage an einen Contentanbieter durchführen, indem Sie Folgendes aufrufen: query() am ContentResolver.

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:

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.