Android 9 (API-Level 28) bietet Nutzern und Entwicklern viele neue Funktionen. In diesem Dokument wird beschrieben, was für Entwickler neu ist.
Weitere Informationen zu den neuen APIs finden Sie im API-Diff-Bericht oder in der Android-API-Referenz. Sehen Sie sich auch die Verhaltensänderungen in Android 9 an, um zu erfahren, in welchen Bereichen sich Plattformänderungen auf Ihre Apps auswirken können.
Indoor-Positionierung mit WLAN RTT

Mit Android 9 wird die Plattformunterstützung für das IEEE 802.11-2016-WLAN-Protokoll (auch als Wi-Fi Round-Trip-Time, RTT, bezeichnet) eingeführt, damit Sie die Innenraumpositionierung in Ihren Apps nutzen können.
Auf Geräten mit Android 9 und Hardwareunterstützung können Ihre Apps die RTT-APIs verwenden, um die Entfernung zu WLAN-Zugriffspunkten (APs) in der Nähe zu messen, die RTT unterstützen. Auf dem Gerät müssen die Standortdienste aktiviert und die WLAN-Suche aktiviert sein (unter Einstellungen > Standort). Außerdem muss Ihre App die Berechtigung ACCESS_FINE_LOCATION
haben. Das Gerät muss sich nicht mit den Zugangspunkten verbinden, um RTT zu verwenden.
Aus Datenschutzgründen kann nur das Smartphone die Entfernung zum Zugriffspunkt ermitteln. Die Zugriffspunkte haben diese Informationen nicht.
Wenn Ihr Gerät die Entfernung zu mindestens drei Zugriffspunkten misst, können Sie einen Multilaterationsalgorithmus verwenden, um die Geräteposition zu schätzen, die am besten zu diesen Messungen passt. Das Ergebnis ist in der Regel auf 1 bis 2 Meter genau.
Mit dieser Genauigkeit können Sie neue Funktionen entwickeln, z. B. Navigation in Gebäuden und standortbezogene Dienste mit hoher Genauigkeit, z. B. eindeutige Sprachsteuerung (z. B. „Schalte dieses Licht an“) und standortbezogene Informationen (z. B. „Gibt es Sonderangebote für dieses Produkt?“).
Die Verwendung der WiFi RTT API wird in der Android WifiRttScan-Demo-App veranschaulicht.
Weitere Informationen finden Sie unter WLAN-Standort: Entfernungsmessung mit RTT.
Unterstützung von Display-Aussparungen

Displayausschnitt mit dem Emulator testen
Android 9 bietet Unterstützung für die neuesten randlosen Displays mit Display-Aussparungen für Kameras und Lautsprecher. Mit der Klasse DisplayCutout
können Sie die Position und Form der nicht funktionalen Bereiche ermitteln, in denen keine Inhalte angezeigt werden sollten. Verwenden Sie die Methode getDisplayCutout()
, um die Existenz und Platzierung dieser Ausschnittbereiche zu ermitteln.
Mit dem neuen Fensterlayout-Attribut layoutInDisplayCutoutMode
kann Ihre App Inhalte um die Ausschnitte eines Geräts herum anordnen. Sie können dieses Attribut auf einen der folgenden Werte festlegen:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Sie können einen Ausschnitt auf jedem Gerät oder Emulator mit Android 9 simulieren:
- Aktivieren Sie die Entwickleroptionen.
- Scrollen Sie auf dem Bildschirm Entwickleroptionen nach unten zum Abschnitt Zeichnen und wählen Sie Display mit Aussparung simulieren aus.
- Wählen Sie die Größe des Ausschnitts aus.
Benachrichtigungen
In Android 9 wurden mehrere Verbesserungen an Benachrichtigungen eingeführt, die alle für Entwickler verfügbar sind, die auf API-Level 28 und höher ausgerichtet sind.

MessagingStyle mit angehängtem Foto.

MessagingStyle mit Antworten und Unterhaltung.
Beispielcode für Benachrichtigungen, einschließlich Android 9-Funktionen, finden Sie im People-Beispiel.
Verbesserte Messaging-Funktionen
Ab Android 7.0 (API-Ebene 24) konnten Sie eine Aktion hinzufügen, über die der Nutzer auf Nachrichten antworten oder anderen Text direkt über die Benachrichtigung eingeben konnte. In Android 9 wurde diese Funktion durch die folgenden Verbesserungen erweitert:
Vereinfachte Unterstützung für Unterhaltungsteilnehmer: Die Klasse
Person
wird verwendet, um Personen zu identifizieren, die an einer Unterhaltung beteiligt sind, einschließlich ihrer Avatare und URIs. Viele andere APIs, z. B.addMessage()
, verwenden jetzt die KlassePerson
anstelle vonCharSequence
. Die KlassePerson
unterstützt auch das Builder-Entwurfsmuster.Unterstützung für Bilder: In Android 9 werden jetzt Bilder in Messaging-Benachrichtigungen auf Smartphones angezeigt. Sie können
setData()
in der Nachricht verwenden, um ein Bild anzuzeigen. Das folgende Code-Snippet zeigt, wie Sie einPerson
und eine Nachricht mit einem Bild erstellen.
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
Antworten als Entwürfe speichern: Ihre App kann die
EXTRA_REMOTE_INPUT_DRAFT
abrufen, die vom System gesendet wird, wenn ein Nutzer versehentlich eine Messaging-Benachrichtigung schließt. Mit diesem Extra können Sie Textfelder in der App vorab ausfüllen, damit Nutzer ihre Antwort fertigstellen können.Gruppenunterhaltung erkennen: Mit
setGroupConversation()
können Sie eine Unterhaltung gezielt als Gruppenunterhaltung oder als Unterhaltung mit nur zwei Personen kennzeichnen.Semantische Aktion für einen Intent festlegen: Mit der Methode
setSemanticAction()
können Sie einer Aktion eine semantische Bedeutung zuweisen, z. B. „Als gelesen markieren“, „Löschen“ oder „Antworten“.Smart Reply: Android 9 unterstützt dieselben vorgeschlagenen Antworten, die in Ihrer Messaging-App verfügbar sind. Verwenden Sie
RemoteInput.setChoices()
, um dem Nutzer eine Reihe von Standardantworten zur Verfügung zu stellen.
Kanaleinstellungen, Übertragungen und „Bitte nicht stören“
Mit Android 8.0 wurden Benachrichtigungskanäle eingeführt. Damit können Sie für jede Art von Benachrichtigung, die Sie anzeigen möchten, einen vom Nutzer anpassbaren Kanal erstellen. In Android 9 wurden die Einstellungen für Benachrichtigungskanäle vereinfacht:
Channelgruppen blockieren: Nutzer können jetzt ganze Gruppen von Channels in den Benachrichtigungseinstellungen einer App blockieren. Mit der Methode
isBlocked()
können Sie ermitteln, wann eine Gruppe blockiert wird, und daher keine Benachrichtigungen für Channels in dieser Gruppe senden.Außerdem kann Ihre App mit der neuen Methode
getNotificationChannelGroup()
die aktuellen Einstellungen für Channelgruppen abfragen.Neue Broadcast-Intent-Typen: Das Android-System sendet jetzt Broadcast-Intents, wenn sich der Blockierungsstatus von Benachrichtigungschannels und Channelgruppen ändert. Die App, zu der der blockierte Kanal oder die blockierte Gruppe gehört, kann auf diese Intents reagieren. Weitere Informationen zu diesen Intent-Aktionen und Extras finden Sie in der aktualisierten Konstantenliste in der
NotificationManager
-Referenz. Informationen zum Reagieren auf Broadcast-Intents finden Sie unter Broadcasts.NotificationManager.Policy
hat drei neue Prioritätskategorien für den Nicht stören-Modus:PRIORITY_CATEGORY_ALARMS
Wecker werden priorisiert.PRIORITY_CATEGORY_MEDIA
priorisiert Töne aus Medienquellen wie Medien und Sprachnavigation.PRIORITY_CATEGORY_SYSTEM
priorisiert Systemtöne.
NotificationManager.Policy
bietet außerdem sieben neue „Bitte nicht stören“-Konstanten, mit denen Sie visuelle Unterbrechungen unterdrücken können:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
verhindert, dass die Benachrichtigung eine Vollbildaktivität startet.SUPPRESSED_EFFECT_LIGHTS
blockiert Benachrichtigungs-LEDs.SUPPRESSED_EFFECT_PEEK
verhindert, dass Benachrichtigungen kurz eingeblendet werden („Peeking“).SUPPRESSED_EFFECT_STATUS_BAR
verhindert, dass Benachrichtigungen in der Statusleiste auf Geräten angezeigt werden, die Statusleisten unterstützen.SUPPRESSED_EFFECT_BADGE
blockiert Badges auf Geräten, die Badges unterstützen. Weitere Informationen finden Sie unter Benachrichtigungsbadge ändern.SUPPRESSED_EFFECT_AMBIENT
blockiert Benachrichtigungen auf Geräten, die Bildschirmschoner unterstützen.SUPPRESSED_EFFECT_NOTIFICATION_LIST
verhindert, dass Benachrichtigungen in der Listenansicht auf Geräten angezeigt werden, die eine Listenansicht unterstützen, z. B. in der Benachrichtigungsleiste oder auf dem Sperrbildschirm.
Unterstützung mehrerer Kameras und Kamera-Updates
Auf Geräten mit Android 9 können Sie gleichzeitig auf Streams von zwei oder mehr physischen Kameras zugreifen. Auf Geräten mit dualer Front- oder Rückkamera können Sie innovative Funktionen erstellen, die mit nur einer Kamera nicht möglich sind, z. B. nahtloses Zoomen, Bokeh und Stereobilder. Mit der API können Sie auch einen logischen oder kombinierten Kamerastream aufrufen, der automatisch zwischen zwei oder mehr Kameras wechselt.
Weitere Verbesserungen bei der Kamera sind zusätzliche Sitzungsparameter, die dazu beitragen, Verzögerungen bei der ersten Aufnahme zu reduzieren, und die Oberflächenfreigabe, mit der Kameraclienten verschiedene Anwendungsfälle ohne Unterbrechung und Neustart des Kamerastreams bewältigen können. Außerdem haben wir APIs für die Blitzunterstützung auf Displaybasis und den Zugriff auf OIS-Zeitstempel für die Bildstabilisierung auf App-Ebene und Spezialeffekte hinzugefügt.
In Android 9 unterstützt die Multi-Camera API monochrome Kameras für Geräte mit der Funktion FULL
oder LIMITED
.
Die monochrome Ausgabe wird über das Format YUV_420_888
erreicht, wobei Y als Graustufenwert, U (Cb) als 128 und V (Cr) als 128 verwendet werden.
Android 9 bietet auf unterstützten Geräten auch Unterstützung für externe USB-/UVC-Kameras.
ImageDecoder für Drawables und Bitmaps
In Android 9 wird die Klasse ImageDecoder
eingeführt, die einen modernen Ansatz zum Decodieren von Bildern bietet. Verwenden Sie diese Klasse anstelle der APIs BitmapFactory
und BitmapFactory.Options
.
Mit ImageDecoder
können Sie ein Drawable
oder ein Bitmap
aus einem Bytepuffer, einer Datei oder einem URI erstellen. Um ein Bild zu decodieren, rufen Sie zuerst createSource()
mit der Quelle des codierten Bildes auf. Rufen Sie dann decodeDrawable()
oder decodeBitmap()
auf und übergeben Sie das ImageDecoder.Source
-Objekt, um ein Drawable
- oder ein Bitmap
-Objekt zu erstellen. Wenn Sie die Standardeinstellungen ändern möchten, übergeben Sie OnHeaderDecodedListener
an decodeDrawable()
oder decodeBitmap()
. ImageDecoder
ruft onHeaderDecoded()
mit der Standardbreite und ‑höhe des Bildes auf, sobald diese bekannt sind.
Wenn das codierte Bild ein animiertes GIF oder WebP ist, gibt decodeDrawable()
ein Drawable
zurück, das eine Instanz der Klasse AnimatedImageDrawable
ist.
Es gibt verschiedene Methoden, um Bildeigenschaften festzulegen:
- Wenn Sie das decodierte Bild auf eine bestimmte Größe skalieren möchten, übergeben Sie die Zieldimensionen an
setTargetSize()
. Sie können Bilder auch mithilfe einer Stichprobengröße skalieren. Übergeben Sie die Stichprobengröße direkt ansetTargetSampleSize()
. - Wenn Sie ein Bild innerhalb des Bereichs des skalierten Bilds zuschneiden möchten, rufen Sie
setCrop()
auf. - Wenn Sie eine veränderbare Bitmap erstellen möchten, übergeben Sie
true
ansetMutableRequired()
.
Mit ImageDecoder
können Sie einem Bild auch benutzerdefinierte und komplexe Effekte hinzufügen, z. B. abgerundete Ecken oder Kreismuster. Verwenden Sie setPostProcessor()
mit einer Instanz der Klasse PostProcessor
, um beliebige Zeichenbefehle auszuführen.
Animation
In Android 9 wird die Klasse AnimatedImageDrawable
zum Zeichnen und Anzeigen von animierten GIF- und WebP-Bildern eingeführt.
AnimatedImageDrawable
funktioniert ähnlich wie AnimatedVectorDrawable
, da der Render-Thread die Animationen von AnimatedImageDrawable
steuert.
Der Rendering-Thread verwendet auch einen Worker-Thread zum Decodieren, damit die Decodierung nicht mit anderen Vorgängen im Rendering-Thread in Konflikt gerät. Mit dieser Implementierung kann in Ihrer App ein animiertes Bild angezeigt werden, ohne dass Sie die Updates verwalten oder andere Ereignisse im UI-Thread Ihrer App beeinträchtigen müssen.
Ein AnimatedImageDrawable
kann mit einer Instanz von ImageDecoder
decodiert werden. Das folgende Code-Snippet zeigt, wie Sie ImageDecoder
verwenden, um Ihre AnimatedImageDrawable
zu decodieren:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException { Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); if (decodedAnimation instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed. ((AnimatedImageDrawable) decodedAnimation).start(); } }
ImageDecoder
bietet mehrere Methoden, mit denen Sie das Bild weiter bearbeiten können.
Mit der Methode setPostProcessor()
können Sie beispielsweise das Erscheinungsbild des Bildes ändern, z. B. eine Kreismaske oder abgerundete Ecken anwenden.
HDR VP9-Video, HEIF-Bildkomprimierung und Media-APIs
Android 9 bietet integrierte Unterstützung für High Dynamic Range (HDR) VP9 Profil 2. So können Sie HDR-Filme von YouTube, Play Filme und anderen Quellen auf HDR-fähigen Geräten an Ihre Nutzer streamen.
Android 9 unterstützt auch die Codierung von Bildern im HEIF-Format (High Efficiency Image File, HEIC). Dadurch wird die Komprimierung verbessert und der Speicherplatz- und Netzwerkdatenverbrauch reduziert. HEIF-Standbildbeispiele werden in den Klassen MediaMuxer
und MediaExtractor
unterstützt. Dank der Plattformunterstützung auf Android 9-Geräten können Sie HEIF-Bilder ganz einfach von Ihrem Backend-Server senden und verwenden. Nachdem Sie dafür gesorgt haben, dass Ihre App mit diesem Datenformat für die Freigabe und Anzeige kompatibel ist, können Sie HEIF als Bildspeicherformat in Ihrer App ausprobieren. Sie können eine JPEG-Datei mit ImageDecoder
oder BitmapFactory
(die eine Bitmap aus einer JPEG-Datei abruft) in eine HEIC-Datei konvertieren. Anschließend können Sie HeifWriter
verwenden, um HEIF-Standbilder aus YUV-Byte-Puffern oder Instanzen von Surface
oder Bitmap
zu schreiben.
Media-Messwerte sind auch über die Klassen AudioTrack
, AudioRecord
und MediaDrm
verfügbar.
In Android 9 werden Methoden für die Klasse MediaDRM
eingeführt, mit denen sich Messwerte, HDCP-Stufen, Sicherheitsstufen und die Anzahl der Sitzungen abrufen lassen. Außerdem wird die Steuerung von Sicherheitsstufen und sicheren Stopps verbessert. Weitere Informationen finden Sie im API-Diff-Bericht.
In Android 9 werden mit der AAudio API mehrere zusätzliche AAudioStream-Attribute unterstützt, darunter „usage“, „content type“ und „input preset“. Mit diesen Attributen können Sie Streams erstellen, die für VoIP- oder Camcorder-Anwendungen optimiert sind. Sie können auch die Sitzungs-ID festlegen, um einen AAudio-Stream einem Submix zuzuordnen, der Effekte enthalten kann. Verwenden Sie die AudioEffect
API, um die Effekte zu steuern.
Mit Android 9 wird die AudioEffect
API für die Dynamikverarbeitung eingeführt.
Mit dieser Klasse können Sie kanalbasierte Audioeffekte wie Equalizer, Mehrbandkompression und Limiter in mehreren Phasen erstellen. Die Anzahl der Bänder und aktiven Phasen ist konfigurierbar und die meisten Parameter können in Echtzeit gesteuert werden.
Sensibilität für Datenkosten in JobScheduler
Ab Android 9 kann JobScheduler
Netzwerksignale von Mobilfunkanbietern verwenden, um die Verarbeitung von netzwerkbezogenen Jobs zu verbessern.
Jobs können ihre geschätzte Datengröße deklarieren, das Prefetching signalisieren und detaillierte Netzwerkanforderungen angeben. JobScheduler
verwaltet dann die Arbeit entsprechend dem Netzwerkstatus. Wenn das Netzwerk beispielsweise signalisiert, dass es überlastet ist, kann JobScheduler
große Netzwerkanfragen aufschieben. Wenn Sie sich in einem Netzwerk mit unbegrenztem Datenvolumen befinden, kann JobScheduler
Vorabruf-Jobs ausführen, um die Nutzerfreundlichkeit zu verbessern, z. B. durch das Vorabrufen von Überschriften.
Achten Sie beim Hinzufügen von Jobs darauf, dass Sie gegebenenfalls setEstimatedNetworkBytes()
, setPrefetch()
und setRequiredNetwork()
verwenden, damit JobScheduler
die Arbeit richtig ausführen kann. Wenn Ihr Job ausgeführt wird, müssen Sie das von JobParameters.getNetwork()
zurückgegebene Network
-Objekt verwenden.
Andernfalls verwenden Sie implizit das Standardnetzwerk des Geräts, das möglicherweise nicht Ihren Anforderungen entspricht und zu einer unbeabsichtigten Datennutzung führt.
Neural Networks API 1.1
Die Neural Networks API wurde in Android 8.1 (API-Level 27) eingeführt, um das maschinelle Lernen auf Android-Geräten zu beschleunigen. In Android 9 wurde die API erweitert und verbessert. Sie unterstützt jetzt neun neue Vorgänge:
- Elementweise mathematische Operationen:
- Array-Vorgänge:
Bekanntes Problem:Wenn Sie ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
-Tensoren an den ANEURALNETWORKS_PAD
-Vorgang übergeben, der unter Android 9 und höher verfügbar ist, stimmt die Ausgabe von NNAPI möglicherweise nicht mit der Ausgabe von übergeordneten Frameworks für maschinelles Lernen wie TensorFlow Lite überein. Sie sollten stattdessen nur
ANEURALNETWORKS_TENSOR_FLOAT32
übergeben, bis das Problem behoben ist.
Außerdem wird mit der API eine neue Funktion eingeführt: ANeuralNetworksModel_relaxComputationFloat32toFloat16()
. Damit können Sie angeben, ob ANEURALNETWORKS_TENSOR_FLOAT32
mit einem Bereich und einer Genauigkeit berechnet werden soll, die so niedrig sind wie beim IEEE 754-Gleitkommaformat mit 16 Bit.
AutoFill-Framework
In Android 9 wurden mehrere Verbesserungen eingeführt, die Autofill-Dienste implementieren können, um die Nutzerfreundlichkeit beim Ausfüllen von Formularen weiter zu verbessern. Weitere Informationen zur Verwendung von Autofill-Funktionen in Ihrer App finden Sie im Leitfaden zum Autofill-Framework.
Erhöhte Sicherheit
Android 9 bietet eine Reihe von Sicherheitsfunktionen, die in den folgenden Abschnitten zusammengefasst werden:
Android geschützte Bestätigung
Auf unterstützten Geräten mit Android 9 oder höher können Sie die Funktion „Android Protected Confirmation“ verwenden. Wenn Sie diesen Workflow verwenden, wird in Ihrer App eine Aufforderung angezeigt, in der der Nutzer eine kurze Erklärung bestätigen muss. Mit dieser Anweisung kann die App bestätigen, dass der Nutzer eine vertrauliche Transaktion wie eine Zahlung abschließen möchte.
Wenn der Nutzer die Erklärung akzeptiert, empfängt und speichert Android Keystore eine kryptografische Signatur, die durch einen keyed-hash message authentication code (HMAC) geschützt ist. Nachdem Android Keystore die Gültigkeit der Nachricht bestätigt hat, kann Ihre App den aus trustedConfirmationRequired
generierten Schlüssel in der vertrauenswürdigen Ausführungsumgebung (Trusted Execution Environment, TEE) verwenden, um die vom Nutzer akzeptierte Nachricht zu signieren. Die Signatur weist mit sehr hoher Wahrscheinlichkeit darauf hin, dass der Nutzer die Erklärung gesehen und ihr zugestimmt hat.
Achtung : Android Protected Confirmation bietet keinen sicheren Informationskanal für den Nutzer. Ihre App kann keine Vertraulichkeitsgarantien annehmen, die über die von der Android-Plattform angebotenen hinausgehen. Verwenden Sie diesen Workflow insbesondere nicht, um vertrauliche Informationen anzuzeigen, die Sie normalerweise nicht auf dem Gerät des Nutzers anzeigen würden.
Eine Anleitung zum Hinzufügen der Unterstützung für die geschützte Bestätigung von Android finden Sie im Leitfaden zur geschützten Bestätigung von Android.
Einheitliches Dialogfeld für die biometrische Authentifizierung
In Android 9 stellt das System biometrische Authentifizierungsdialogfelder im Namen Ihrer App bereit. Diese Funktion sorgt für ein standardisiertes Erscheinungsbild und eine standardisierte Platzierung des Dialogfelds. So können Nutzer darauf vertrauen, dass sie sich mit einem vertrauenswürdigen biometrischen Anmeldedatenprüfer authentifizieren.
Wenn Ihre App FingerprintManager
verwendet, um Nutzern ein Dialogfeld für die Fingerabdruckauthentifizierung anzuzeigen, wechseln Sie stattdessen zu BiometricPrompt
. BiometricPrompt
verlässt sich darauf, dass das System das Authentifizierungsdialogfeld anzeigt. Das Verhalten der App wird auch an die Art der biometrischen Authentifizierung angepasst, die ein Nutzer ausgewählt hat.
Hardwaresicherheitsmodul
Auf unterstützten Geräten mit Android 9 oder höher kann ein StrongBox KeyMint (früher Keymaster) installiert sein, eine Implementierung des KeyMint-HAL (früher Keymaster), das sich in einem Hardware-Sicherheitsmodul befindet. Das Modul enthält Folgendes:
- Eigene CPU
- Sicherer Speicher
- Ein echter Zufallszahlengenerator.
- Zusätzliche Mechanismen, um Manipulationen an Paketen und das nicht autorisierte Sideloading von Apps zu verhindern.
Beim Prüfen von Schlüsseln, die im StrongBox KeyMint gespeichert sind, wird die Integrität eines Schlüssels vom System mit der Trusted Execution Environment (TEE) bestätigt.
Weitere Informationen zur Verwendung von StrongBox KeyMint finden Sie unter Hardware Security Module.
Sicherer Schlüsselimport in den Schlüsselspeicher
Android 9 bietet zusätzliche Sicherheit bei der Schlüsselentschlüsselung, da verschlüsselte Schlüssel mithilfe eines ASN.1-codierten Schlüsselformats sicher in den Keystore importiert werden können. KeyMint entschlüsselt dann die Schlüssel im Keystore, sodass der Inhalt der Schlüssel nie als Klartext im Hostspeicher des Geräts angezeigt wird.
Weitere Informationen zum sicheren Importieren verschlüsselter Schlüssel
APK-Signaturschema mit Schlüsselrotation
Unter Android 9 wird das APK-Signaturschema v3 unterstützt. Bei diesem Schema kann für jedes Signaturzertifikat ein Proof-of-Rotation-Eintrag in den Signaturblock aufgenommen werden. Diese Funktion ermöglicht es, Ihre App mit einem neuen Signaturzertifikat zu signieren, indem die bisherigen Signaturzertifikate der APK-Datei mit dem Zertifikat verknüpft werden, mit dem sie jetzt signiert ist.
Option, die Entschlüsselung von Schlüsseln nur auf entsperrten Geräten zulässt
In Android 9 wird das Flag unlockedDeviceRequired
eingeführt. Mit dieser Option wird festgelegt, ob für den Keystore der Bildschirm entsperrt sein muss, bevor die Entschlüsselung von übertragenen oder gespeicherten Daten mit dem angegebenen Schlüssel zulässig ist. Diese Schlüsseltypen eignen sich gut zum Verschlüsseln vertraulicher Daten, die auf der Festplatte gespeichert werden sollen, z. B. Gesundheits- oder Unternehmensdaten. Das Flag bietet Nutzern eine höhere Sicherheit, dass die Daten nicht entschlüsselt werden können, wenn das Gerät gesperrt ist, falls ihr Smartphone verloren geht oder gestohlen wird.
Wenn Sie einen Schlüssel vor der Entschlüsselung schützen möchten, während das Gerät gesperrt ist, aktivieren Sie das Flag, indem Sie true
an die Methode setUnlockedDeviceRequired()
übergeben. Nach Abschluss dieses Schritts schlagen alle Versuche fehl, Daten mit diesem Schlüssel zu entschlüsseln oder zu signieren, wenn der Bildschirm des Nutzers gesperrt ist. Für den Zugriff auf ein gesperrtes Gerät ist eine PIN, ein Passwort, ein Fingerabdruck oder ein anderer vertrauenswürdiger Faktor erforderlich.
Unterstützung für Legacy-Verschlüsselung
Android 9-Geräte, die mit Keymaster 4 ausgeliefert werden, unterstützen den Triple Data Encryption Algorithm (Triple DES). Wenn Ihre App mit Legacy-Systemen interagiert, die Triple DES erfordern, verwenden Sie diesen Chiffriertyp, wenn Sie vertrauliche Anmeldedaten verschlüsseln.
Weitere Informationen zum Sichern Ihrer App
Einstellung von WPS
Wi-Fi Protected Setup (WPS) wird aus Sicherheitsgründen nicht mehr unterstützt.
Android-Sicherungen
In Android 9 wurden neue Funktionen und Entwickleroptionen für das Sichern und Wiederherstellen hinzugefügt. Details zu diesen Änderungen finden Sie in den folgenden Abschnitten.
Sicherungen mit clientseitiger Verschlüsselung
Unter Android 9 ist die Verschlüsselung von Android-Sicherungen über einen Clientschlüssel möglich. Diese Unterstützung wird automatisch aktiviert, wenn die folgenden Bedingungen erfüllt sind:
- Der Nutzer hat die Sicherung mit Android 9 oder höher aktiviert .
- Der Nutzer hat eine Displaysperre für sein Gerät eingerichtet, die zum Entsperren eine PIN, ein Muster oder ein Passwort erfordert.
Wenn diese Datenschutzmaßnahme aktiviert ist, ist die PIN, das Muster oder das Passwort des Geräts erforderlich, um Daten aus den Sicherungen wiederherzustellen, die vom Gerät des Nutzers erstellt wurden. Weitere Informationen zur Technologie hinter dieser Funktion finden Sie im Whitepaper Google Cloud Key Vault Service.
Gerätebedingungen für die Sicherung festlegen
Wenn Ihre App-Daten vertrauliche Informationen oder Einstellungen enthalten, können Sie in Android 9 die Gerätebedingungen definieren, unter denen die Daten Ihrer App in die Sicherung des Nutzers aufgenommen werden, z. B. wenn die clientseitige Verschlüsselung aktiviert ist oder eine lokale Übertragung von Gerät zu Gerät stattfindet.
Weitere Informationen zum Sichern von Daten auf Android-Geräten finden Sie unter Datensicherung – Übersicht.
Bedienungshilfen
Android 9 bietet Verbesserungen am Framework für Barrierefreiheit, die es einfacher machen, Nutzern Ihrer App ein noch besseres Nutzungserlebnis zu bieten.
Semantik für die Navigation
Mit den in Android 9 hinzugefügten Attributen können Sie einfacher definieren, wie Bedienungshilfen, insbesondere Screenreader, von einem Teil des Bildschirms zum anderen navigieren. Diese Attribute können Nutzern mit eingeschränktem Sehvermögen helfen, schnell durch Text in der Benutzeroberfläche Ihrer App zu navigieren und eine Auswahl zu treffen.
In einer Shopping-App kann ein Screenreader Nutzern beispielsweise helfen, direkt von einer Kategorie mit Angeboten zur nächsten zu wechseln, ohne dass der Screenreader alle Elemente in einer Kategorie vorlesen muss, bevor er zur nächsten wechselt.
Titel von Bedienungshilfenbereichen
In Android 8.1 (API-Ebene 27) und niedriger können Bedienungshilfen nicht immer erkennen, wann ein bestimmter Bereich des Bildschirms aktualisiert wurde, z. B. wenn eine Aktivität ein Fragment durch ein anderes ersetzt. Bereiche bestehen aus logisch gruppierten, visuell zusammenhängenden UI-Elementen, die in der Regel ein Fragment bilden.
Unter Android 9 können Sie Titel für Bedienungshilfenbereiche oder individuell identifizierbare Titel für diese Bereiche angeben. Wenn ein Bereich einen Titel für Barrierefreiheit hat, erhalten Barrierefreiheitsdienste detailliertere Informationen, wenn sich der Bereich ändert. Mit dieser Funktion können Dienste Nutzern detailliertere Informationen dazu geben, was sich in der Benutzeroberfläche geändert hat.
Verwenden Sie das Attribut android:accessibilityPaneTitle
, um den Titel eines Bereichs anzugeben. Sie können auch den Titel eines UI-Bereichs aktualisieren, der zur Laufzeit ersetzt wird, indem Sie setAccessibilityPaneTitle()
verwenden.
Sie können beispielsweise einen Titel für den Inhaltsbereich eines Fragment
-Objekts angeben.
Überschriftenbasierte Navigation
Wenn in Ihrer App Textinhalte mit logischen Überschriften angezeigt werden, legen Sie das Attribut android:accessibilityHeading
für die Instanzen von View
, die diese Überschriften darstellen, auf true
fest. Durch das Hinzufügen dieser Überschriften können Barrierefreiheitsdienste Nutzern helfen, direkt von einer Überschrift zur nächsten zu navigieren. Jeder Bedienungshilfendienst kann diese Funktion nutzen, um die Navigation auf der Benutzeroberfläche für Nutzer zu verbessern.
Gruppennavigation und ‑ausgabe
Screenreader haben das Attribut android:focusable
traditionell verwendet, um zu bestimmen, wann sie ein ViewGroup
oder eine Sammlung von View
-Objekten als eine Einheit vorlesen sollen. So konnten Nutzer nachvollziehen, dass die Ansichten logisch miteinander verknüpft waren.
In Android 8.1 und niedriger müssen Sie jedes View
-Objekt in einem ViewGroup
als nicht fokussierbar und das ViewGroup
selbst als fokussierbar markieren. Diese Anordnung führte dazu, dass einige Instanzen von View
als fokussierbar markiert wurden, was die Tastaturnavigation erschwerte.
Ab Android 9 können Sie das Attribut android:screenReaderFocusable
anstelle des Attributs android:focusable
verwenden, wenn das Fokussieren eines View
-Objekts unerwünschte Folgen hat. Screenreader legen den Fokus auf alle Elemente, für die entweder android:screenReaderFocusable
oder android:focusable
auf true
festgelegt ist.
Komfortaktionen
Android 9 bietet Unterstützung für die Ausführung von Komfortaktionen im Namen von Nutzern:
- Interaktion mit Kurzinfos
- Durch die hinzugefügten Funktionen im Bedienungshilfen-Framework haben Sie Zugriff auf Kurzinfos in der Benutzeroberfläche einer App. Verwenden Sie
getTooltipText()
, um den Text einer Kurzinfo zu lesen, undACTION_SHOW_TOOLTIP
undACTION_HIDE_TOOLTIP
, um Instanzen vonView
anzuweisen, ihre Kurzinfos ein- oder auszublenden. - Globale Aktionen hinzugefügt
- Mit Android 9 werden zwei zusätzliche Geräteaktionen in der Klasse
AccessibilityService
eingeführt. Mit Ihrem Dienst können Nutzer ihre Geräte sperren und Screenshots aufnehmen. Verwenden Sie dazu die AktionenGLOBAL_ACTION_LOCK_SCREEN
undGLOBAL_ACTION_TAKE_SCREENSHOT
.
Details zur Änderung des Zeitfensters
Unter Android 9 ist es einfacher, Updates für die Fenster einer App zu verfolgen, wenn eine App mehrere Fenster gleichzeitig neu zeichnet. Wenn ein TYPE_WINDOWS_CHANGED
-Ereignis eintritt, verwenden Sie die getWindowChanges()
-API, um zu ermitteln, wie sich die Fenster geändert haben. Bei einer Aktualisierung mit mehreren Fenstern wird für jedes Fenster eine eigene Gruppe von Ereignissen generiert.
Die Methode getSource()
gibt die Stammansicht des Fensters zurück, das mit jedem Ereignis verknüpft ist.
Wenn eine App Titel für Bedienungshilfenbereiche für ihre View
-Objekte definiert hat, kann Ihr Dienst erkennen, wenn die Benutzeroberfläche der App aktualisiert wird. Wenn ein TYPE_WINDOW_STATE_CHANGED
-Ereignis eintritt, verwenden Sie die von getContentChangeTypes()
zurückgegebenen Typen, um zu ermitteln, wie sich das Fenster geändert hat. Das Framework kann beispielsweise erkennen, wenn ein Bereich einen neuen Titel hat oder wenn ein Bereich verschwunden ist.
Ausrichtung
Um unbeabsichtigte Drehungen zu vermeiden, haben wir einen Modus hinzugefügt, der die aktuelle Ausrichtung fixiert, auch wenn sich die Geräteposition ändert. Nutzer können die Drehung bei Bedarf manuell auslösen, indem sie eine Schaltfläche in der Systemleiste drücken.
Die Auswirkungen auf die Kompatibilität von Apps sind in den meisten Fällen minimal. Wenn Ihre App jedoch ein benutzerdefiniertes Rotationsverhalten oder ungewöhnliche Einstellungen für die Bildschirmausrichtung verwendet, können Probleme auftreten, die zuvor unbemerkt geblieben wären, als die Rotationspräferenz des Nutzers immer auf Hochformat eingestellt war. Wir empfehlen Ihnen, das Rotationsverhalten in allen wichtigen Aktivitäten Ihrer App zu prüfen und dafür zu sorgen, dass alle Einstellungen für die Bildschirmausrichtung weiterhin für eine optimale Nutzerfreundlichkeit sorgen.
Weitere Informationen finden Sie unter Verhaltensänderungen.

In einem neuen Rotationsmodus können Nutzer die Rotation bei Bedarf manuell über eine Schaltfläche in der Systemleiste auslösen.
Text
Android 9 bietet die folgenden textbezogenen Funktionen:
Vorberechneter Text: Die Klasse
PrecomputedText
verbessert die Leistung beim Rendern von Text, da Sie die erforderlichen Informationen vorab berechnen und im Cache speichern können. Außerdem kann Ihre App damit das Textlayout außerhalb des Hauptthreads ausführen.Vergrößerung: Die Klasse
Magnifier
ist ein Plattform-Widget, das eine Vergrößerungs-API bereitstellt, die eine einheitliche Vergrößerungsfunktion in allen Apps ermöglicht.Smart Linkify: In Android 9 wird die Klasse
TextClassifier
verbessert. Sie nutzt maschinelles Lernen, um bestimmte Entitäten im ausgewählten Text zu erkennen und Aktionen vorzuschlagen. MitTextClassifier
kann Ihre App beispielsweise erkennen, dass der Nutzer eine Telefonnummer ausgewählt hat. Ihre App könnte dann vorschlagen, dass der Nutzer mit dieser Nummer einen Anruf startet. Die Funktionen inTextClassifier
ersetzen die Funktionalität der KlasseLinkify
.Textlayout: Mehrere praktische Methoden und Attribute erleichtern die Implementierung Ihres UI-Designs. Weitere Informationen finden Sie in der Referenzdokumentation zu
TextView
.
Ahead-of-Time-Konvertierung von DEX-Dateien durch ART
Auf Geräten mit Android 9 oder höher optimiert der Ahead-of-Time-Compiler (AOT) der Android-Laufzeit (ART) komprimierte DEX-Dateien (Dalvik Executable) zusätzlich, indem er die DEX-Dateien in einem App-Paket in eine kompaktere Darstellung konvertiert. Durch diese Änderung kann Ihre App schneller gestartet werden und benötigt weniger Speicherplatz und RAM.
Diese Verbesserung kommt insbesondere Low-End-Geräten mit langsameren Festplatten-E/A-Geschwindigkeiten zugute.
System-Tracing auf dem Gerät
Mit Android 9 können Sie System-Traces auf Ihrem Gerät aufzeichnen und dann einen Bericht dieser Aufzeichnungen mit Ihrem Entwicklungsteam teilen. Dieser Bericht unterstützt mehrere Formate, darunter HTML.
Durch das Erfassen dieser Traces können Sie Zeitmessungsdaten zu den Prozessen und Threads Ihrer App erfassen und andere Arten von global wichtigen Gerätestatus ansehen.
Weitere Informationen zu diesem Tool