Android 9 (API-Level 28) bietet tolle neue Funktionen für Nutzenden und Entwickelnden. In diesem Dokument werden die Neuerungen für Entwickler beschrieben.
Weitere Informationen zu den neuen APIs finden Sie im API-Diff-Bericht oder in der Android API-Referenz. Weitere Informationen Weitere Informationen zu Verhaltensänderungen unter Android 9 zu Bereichen, in denen sich Plattformänderungen auf Ihre Apps auswirken können.
Indoor-Positionierung mit Wi-Fi RTT

Android 9 bietet Plattformunterstützung für das IEEE 802.11-2016-WLAN-Protokoll, auch als Wi-Fi Round-Trip-Time (RTT) bezeichnet. So können Sie die Indoor-Positionierung in Ihren Apps nutzen.
Auf Geräten mit Android 9 und Hardwareunterstützung können Ihre Apps die RTT APIs verwenden, um die Entfernung zu RTT-fähigen WLAN-Zugangspunkten (APs) in der Nähe zu messen. Das Gerät muss
Standortdienste aktiviert und die WLAN-Suche aktiviert (unter
Einstellungen > Standort) und Ihre App muss über die
ACCESS_FINE_LOCATION
Berechtigung. Das Gerät muss sich nicht mit den Zugangspunkten verbinden, um RTT zu verwenden.
Zum Schutz der Privatsphäre kann nur das Smartphone die Entfernung zum Zugangspunkt ermitteln. Die Zugangspunkte haben diese Informationen nicht.
Wenn Ihr Gerät die Entfernung zu mindestens drei Zugangspunkten misst, können Sie mit einem Trilateration-Algorithmus die Geräteposition 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. die Navigation in Gebäuden und detaillierte standortbasierte Dienste wie die differenzierte Sprachsteuerung (z. B. „Schalte diese Lampe ein“) und standortbasierte Informationen (z. B. „Gibt es Sonderangebote für dieses Produkt?“).
Die WiFi RTT API wird in der Demo-App Android WifiRttScan verwendet.
Weitere Informationen finden Sie unter WLAN-Standort: Abstand mit RTT messen.
Unterstützung für Display-Aussparung

Display-Aussparung mit Emulator testen
Android 9 bietet Unterstützung für die neuesten randlosen Displays
mit Display-Aussparungen für Kameras und Lautsprecher. Die
DisplayCutout
können Sie die Position und Form von nicht funktionalen Bereichen ermitteln,
sollte nicht angezeigt werden. Verwenden Sie die Methode getDisplayCutout()
, um die Existenz und Platzierung dieser Ausschnitte zu ermitteln.
Ein neues Fenster-Layout-Attribut,
layoutInDisplayCutoutMode
,
kannst du den Inhalt deiner App um die Aussparungen 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
So simulieren Sie einen Displayausschnitt auf jedem Gerät oder Emulator mit Android 9:
- Aktivieren Sie die Entwickleroptionen.
- Scrollen Sie auf dem Bildschirm Entwickleroptionen nach unten zum Abschnitt Zeichnung. und wählen Sie Display mit Aussparung simulieren aus.
- Wählen Sie die Größe des Ausschnitts aus.
Benachrichtigungen
Mit Android 9 wurden mehrere Verbesserungen an Benachrichtigungen eingeführt, die allen Entwicklern zur Verfügung stehen, die ihre Apps auf API-Level 28 oder höher ausrichten.

MessagingStyle mit angehängtem Foto.

MessagingStyle mit Antworten und Unterhaltungen
Beispielcode für Benachrichtigungen, einschließlich Android 9-Funktionen, finden Sie im Beispiel für Personen.
Verbesserte Nachrichtenfunktion
Ab Android 7.0 (API-Ebene 24) können Sie eine Aktion hinzufügen, über die der Nutzer auf Nachrichten antworten oder anderen Text direkt über die Benachrichtigung eingeben kann. Mit Android 9 diese Funktion mit den folgenden Verbesserungen:
Vereinfachte Unterstützung für Gesprächsteilnehmer:
Person
-Klasse wird verwendet, um Personen zu identifizieren, die an einer Konversation beteiligt sind, einschließlich ihrer und URIs enthalten. Viele andere APIs, z. B.addMessage()
, nutzen jetzt diePerson
-Klasse anstelle einerCharSequence
. KlassePerson
unterstützt auch das Builder-Designmuster.Unterstützung für Bilder: Android 9 zeigt jetzt Bilder in Messaging-Benachrichtigungen an auf Smartphones. Sie können
setData()
in der Nachricht verwenden, um ein Bild anzuzeigen. Das folgende Code-Snippet zeigt, wie du einePerson
und eine Nachricht mit einem Bild erstellst.
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
die vom System gesendet wird, wenn ein Nutzer versehentlich eine Messaging-Benachrichtigung schließt. Mit dieser zusätzlichen Funktion können Sie Textfelder in der App vorab ausfüllen, damit Nutzende ihre Antwort zu Ende zu bringen.Herausfinden, ob es sich um eine Gruppenunterhaltung handelt: Mit
setGroupConversation()
können Sie eine Unterhaltung als Gruppenunterhaltung oder Unterhaltung mit Einzelpersonen kennzeichnen.Legen Sie die semantische Aktion für einen Intent fest:
setSemanticAction()
können Sie Aktionen semantische Bedeutung verleihen, z. B. „als gelesen markieren“, „Löschen“, „antworten“, und so weiter.Intelligente Antwort: Android 9 unterstützt dieselben vorgeschlagenen Antworten wie in Ihrer Messaging-App. 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 angezeigt werden soll, einen vom Nutzer anpassbaren Kanal erstellen. Mit Android 9 wurden die Einstellungen für Benachrichtigungskanäle vereinfacht:
Blockieren von Kanalgruppen: Nutzer können jetzt in den Benachrichtigungseinstellungen einer App ganze Kanalgruppen blockieren. Mit der Methode
isBlocked()
können Sie erkennen, ob eine Gruppe blockiert ist und daher keine Benachrichtigungen für Kanäle in dieser Gruppe gesendet werden.Außerdem kann Ihre App die aktuellen Einstellungen der Channelgruppe mit das neue
getNotificationChannelGroup()
.Neue Broadcast-Intent-Typen: Das Android-System sendet jetzt Broadcast-Intents, wenn sich der Blockierungsstatus von Benachrichtigungskanälen und -gruppen ändert. Die App, zu der der blockierte Kanal oder die Gruppe gehört, kann diese Intents überwachen und entsprechend reagieren. Weitere Informationen zu diesen Intent-Aktionen und Extras finden Sie in der aktualisierten Liste der Konstanten in der
NotificationManager
-Referenz. Informationen zum Reagieren auf Broadcast-Intents finden Sie unter Nachrichten an alle:NotificationManager.Policy
gibt es drei neue Prioritätskategorien für „Bitte nicht stören“:PRIORITY_CATEGORY_ALARMS
priorisiert Alarme.PRIORITY_CATEGORY_MEDIA
priorisiert Töne von Medienquellen wie Medien und Sprachnavigation.PRIORITY_CATEGORY_SYSTEM
priorisiert Systemtöne.
Für
NotificationManager.Policy
gibt es außerdem sieben neue „Bitte nicht stören“-Konstanten kann verwendet werden, um visuelle Unterbrechungen zu unterdrücken:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
Verhindert, dass die Benachrichtigung eine Vollbildaktivität startet.SUPPRESSED_EFFECT_LIGHTS
blockiert die Benachrichtigungslichter.SUPPRESSED_EFFECT_PEEK
verhindert, dass Benachrichtigungen kurz in den sichtbaren Bereich geschoben werden ("Einblenden").SUPPRESSED_EFFECT_STATUS_BAR
verhindert, dass Benachrichtigungen auf Geräten, die Statusleisten unterstützen, in der Statusleiste angezeigt werden.SUPPRESSED_EFFECT_BADGE
verhindert das Anzeigen von Ausweisen auf Geräten, die Ausweise unterstützen. Weitere Informationen finden Sie unter Benachrichtigungssymbol ändern.SUPPRESSED_EFFECT_AMBIENT
blockiert Benachrichtigungen auf Geräten, die Bildschirmschoner unterstützen.SUPPRESSED_EFFECT_NOTIFICATION_LIST
verhindert, dass Benachrichtigungen auf Geräten, die eine Listenansicht unterstützen, in der Listenansicht angezeigt werden, z. B. im Benachrichtigungs-Schieberegler oder auf dem Sperrbildschirm.
Unterstützung mehrerer Kameras und Kameraupdates
Auf Geräten mit Android 9 kannst du auf Streams zugreifen gleichzeitig von zwei oder mehr physischen Kameras. Auf Geräten mit Kamera mit Dual-Front- oder Rückkamera können Sie innovative Funktionen, die mit einer einzigen Kamera nicht möglich sind, wie beispielsweise Zoom, Bokeh und Stereovision verwenden. Mit der API können Sie auch einen logischen oder zusammengeführten Kamerastream aufrufen, der automatisch zwischen zwei oder mehr Kameras wechselt.
Zu den weiteren Verbesserungen bei der Kamera gehören zusätzliche Sitzungs- Parameter mit denen sich Verzögerungen bei der ersten Aufnahme vermeiden lassen. Und dank der Funktion zum Teilen Kameraclients können verschiedene Anwendungsfälle abdecken, ohne die App anzuhalten oder zu starten. Kamerastreaming. Außerdem haben wir APIs für die displaybasierte Blitzunterstützung und den Zugriff auf OIS-Zeitstempel hinzugefügt, um die Bildstabilisierung und Spezialeffekte auf App-Ebene zu ermöglichen.
Unter Android 9 unterstützt die Multi-Camera API monochrome Kameras für Geräte mit FULL
- oder LIMITED
-Funktion.
Die monochrome Ausgabe erfolgt über die
YUV_420_888
mit Y als Graustufen, U (Cb) als 128 und V (Cr) als 128.
Android 9 ermöglicht auch die Unterstützung externer USB-Sticks/UVC-Dateien. Kameras an unterstützten Geräten.
ImageDecoder für Drawables und Bitmaps
In Android 9 wird die Klasse ImageDecoder
eingeführt, die einen modernisierten Ansatz für die Dekodierung von Bildern bietet. Diesen Kurs verwenden
anstelle von BitmapFactory
und BitmapFactory.Options
APIs
Mit ImageDecoder
können Sie eine Drawable
oder eine Bitmap
aus einem Byte-Puffer, einer Datei oder einem URI erstellen. Wenn Sie ein Bild decodieren möchten, rufen Sie zuerst createSource()
mit der Quelle des codierten Bildes auf. Rufen Sie dann
decodeDrawable()
oder decodeBitmap()
indem Sie den ImageDecoder.Source
übergeben.
um ein Drawable
-Objekt zu erstellen,
oder Bitmap
. 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()
den Fehlerwert
Drawable
, die eine Instanz des
AnimatedImageDrawable
.
Es gibt verschiedene Methoden, um Bildeigenschaften festzulegen:
- Um das decodierte Bild auf eine exakte Größe zu skalieren, übergeben Sie die Zielabmessungen in
setTargetSize()
Sie können Bilder auch mithilfe einer Stichprobengröße skalieren. Übergeben Sie die Stichprobengröße direkt ansetTargetSampleSize()
. - Um ein Bild zuzuschneiden, das innerhalb des Bereichs des skalierten Bildes liegt, rufen Sie
setCrop()
- Wenn Sie eine veränderbare Bitmap erstellen möchten, geben Sie
true
ansetMutableRequired()
weiter.
Mit ImageDecoder
können Sie einem Bild auch benutzerdefinierte und komplexe Effekte hinzufügen, z. B. abgerundete Ecken oder Kreismasken. Verwenden Sie setPostProcessor()
mit einer Instanz der Klasse PostProcessor
, um beliebige Zeichenbefehle auszuführen.
Animation
Mit Android 9 wird die
AnimatedImageDrawable
Klasse zum Zeichnen und Anzeigen animierter GIF- und WebP-Bilder.
AnimatedImageDrawable
funktioniert ähnlich wie AnimatedVectorDrawable
, da die Animationsfunktionen von AnimatedImageDrawable
vom Render-Thread gesteuert werden.
Der Render-Thread verwendet auch einen Worker-Thread für die Dekodierung, damit die Dekodierung nicht andere Vorgänge im Render-Thread beeinträchtigt. Diese Implementierung ermöglicht
um ein animiertes Bild anzuzeigen, ohne die Updates oder
andere Ereignisse im UI-Thread Ihrer App beeinträchtigen.
Ein AnimatedImageDrawable
kann mit einer Instanz von ImageDecoder
decodiert werden. Im folgenden Code-Snippet wird gezeigt, wie du ImageDecoder
zum Decodieren von AnimatedImageDrawable
verwendest:
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 Image weiter ändern können.
Mit der Methode setPostProcessor()
können Sie beispielsweise das Erscheinungsbild des Bilds ändern, indem Sie eine kreisförmige Maske 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 Profile 2, So kannst du deinen Nutzern HDR-fähige Filme aus YouTube, Play Filme & Serien und anderen Quellen auf HDR-fähigen Geräten nutzen.
Android 9 unterstützt jetzt auch die Bildcodierung mit dem High Efficiency Image
Dateiformat (HEIF
oder HEIC), wodurch die Komprimierung verbessert und Speicherplatz und Netzwerkdaten reduziert werden.
Nutzung. Beispiele für HEIF-Standbilder werden in der
MediaMuxer
und MediaExtractor
Klassen. Dank der Plattformunterstützung auf Geräten mit Android 9 ist es ganz einfach,
HEIF-Bilder von
Ihrem Back-End-Server verwenden. Nachdem Sie sich vergewissert haben,
App ist mit diesem Datenformat zum Teilen und Anzeigen kompatibel – probier HEIF aus
als Speicherformat für Bilder
in Ihrer App verwenden. Sie können eine JPEG-zu-Heic-Konvertierung
mit ImageDecoder
oder
BitmapFactory
(wobei
Bitmap aus einer JPEG-Datei). Sie können dann
HeifWriter
zum Schreiben von HEIF
Standbilder aus YUV-Bytepuffern oder Instanzen von
Surface
oder
Bitmap
Medienmesswerte sind auch in den Klassen AudioTrack
, AudioRecord
und MediaDrm
verfügbar.
In Android 9 werden der Klasse MediaDRM
Methoden hinzugefügt, mit denen sich Messwerte, HDCP-Ebenen, Sicherheitsebenen und die Anzahl der Sitzungen abrufen und die Kontrolle über Sicherheitsebenen und sichere Stopps verbessern lassen. Weitere Informationen finden Sie im API-Diff-Bericht.
In Android 9 wird mit der AAudio API die Unterstützung für mehrere zusätzliche AAudioStream-Attribute hinzugefügt, darunter „Nutzung“, „Inhaltstyp“ und „Eingabevoreinstellung“. Mit diesen Attributen können Sie Streams erstellen, die für VoIP- oder Camcorderanwendungen optimiert sind. Sie können auch die Sitzungs-ID auf
einen AAudio-Stream mit einem Submix verknüpfen, der Effekte enthalten kann. Mit der AudioEffect
API kannst du die Effekte steuern.
Mit Android 9 wird die AudioEffect
API für die dynamische Verarbeitung eingeführt.
Mit dieser Klasse kannst du kanalbasierte Audioeffekte wie Equalizer, Mehrbandkompression und Limiter über mehrere Phasen hinweg erstellen. Die Anzahl der Bänder und aktiven Stufen ist konfigurierbar und die meisten Parameter können in Echtzeit gesteuert werden.
Vertraulichkeit der Datenkosten in JobScheduler
Ab Android 9, JobScheduler
von Mobilfunkanbietern bereitgestellte Netzwerkstatussignale verwenden, um die Verarbeitung zu verbessern
von netzwerkbezogenen Jobs.
Jobs können ihre geschätzte Datengröße deklarieren, einen Signal-Vorabruf durchführen und
und detaillierte Netzwerkanforderungen. JobScheduler
verwaltet dann die Arbeit entsprechend dem Netzwerkstatus. Wenn das Netzwerk beispielsweise überlastet ist, kann JobScheduler
große Netzwerkanfragen verschieben. Wenn du dich in einem unbegrenzten Netzwerk befindest, kann JobScheduler
prefetch-Jobs ausführen, um die Nutzerfreundlichkeit zu verbessern, z. B. durch das Vorabladen von Schlagzeilen.
Achten Sie beim Hinzufügen von Jobs darauf, bei Bedarf setEstimatedNetworkBytes()
, setPrefetch()
und setRequiredNetwork()
zu verwenden, damit JobScheduler
die Arbeit richtig verarbeiten kann. Wenn Ihr Job ausgeführt wird,
müssen Sie das Objekt Network
verwenden.
zurückgegeben von
JobParameters.getNetwork()
Andernfalls wird das Standardnetzwerk des Geräts verwendet, 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-Ebene 27) eingeführt, um maschinelles Lernen direkt auf dem Gerät unter Android zu beschleunigen. Android 9 erweitert und verbessert die API und bietet Unterstützung für neun neue Vorgänge:
- Elementweise mathematische Operationen:
- Array-Vorgänge:
Bekanntes Problem: Wenn ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
-Tensoren an den Vorgang ANEURALNETWORKS_PAD
übergeben werden, der unter Android 9 und höher verfügbar ist, stimmt die Ausgabe von NNAPI möglicherweise nicht mit der Ausgabe von Frameworks für maschinelles Lernen höherer Ebene überein, z. B. TensorFlow Lite. Ich
sollte stattdessen nur
ANEURALNETWORKS_TENSOR_FLOAT32
bis das Problem behoben ist.
Außerdem wird mit der API die neue Funktion ANeuralNetworksModel_relaxComputationFloat32toFloat16()
eingeführt, mit der Sie angeben können, ob ANEURALNETWORKS_TENSOR_FLOAT32
mit einem Bereich und einer Genauigkeit berechnet werden soll, die so niedrig sind wie beim 16-Bit-Gleitkommaformat IEEE 754.
AutoFill-Framework
Android 9 bietet mehrere Verbesserungen beim automatischen Ausfüllen implementieren, um die Nutzererfahrung beim Ausfüllen . Weitere Informationen zur Verwendung der Autofill-Funktionen in deiner App findest du in der Leitfaden zum Autofill-Framework
Erhöhte Sicherheit
Android 9 bietet mehrere 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 Bestätigung durch Android-Schutz verwenden. Bei Verwendung dieses Workflows wird dem Nutzer in Ihrer App eine Aufforderung angezeigt, in der er aufgefordert wird, eine kurze Erklärung zu genehmigen. Mit dieser Aussage kann die App bestätigen, dass der Nutzer ein sensible Transaktion wie eine Zahlung.
Wenn der Nutzer die Erklärung akzeptiert, empfängt und speichert der Android Keystore eine kryptografische Signatur, die durch einen HMAC (Keyed-Hash Message Authentication Code) geschützt ist. Nachdem der Android Keystore die Gültigkeit der Nachricht bestätigt hat, kann Ihre App den aus trustedConfirmationRequired
generierten Schlüssel in der Trusted Execution Environment (TEE) verwenden, um die vom Nutzer akzeptierte Nachricht zu signieren. Die Unterschrift gibt mit sehr hoher Wahrscheinlichkeit an, dass der Nutzer die Erklärung gelesen und ihr zugestimmt hat.
Achtung: Die geschützte Bestätigung von Android bietet keinen sicheren Informationskanal für den Nutzer. Ihre App kann keine Vertraulichkeitsgarantien übernehmen, die über die der Android-Plattform hinausgehen. Verwenden Sie diesen Workflow insbesondere nicht, um vertrauliche Daten anzuzeigen, die Sie normalerweise nicht auf dem Gerät des Nutzers anzeigen würden.
Eine Anleitung zur Unterstützung der Android Protected Confirmation-Bestätigung finden Sie in der Android Protected Bestätigung .
Dialogfeld für einheitliche biometrische Authentifizierung
Unter Android 9 stellt das System Dialogfelder für die biometrische Authentifizierung im Namen Ihrer App bereit. Diese Funktion sorgt für ein standardisiertes Erscheinungsbild und eine standardmäßige Platzierung des Dialogfelds, sodass Nutzer mehr Vertrauen in die Authentifizierung über einen vertrauenswürdigen biometrischen Anmeldedaten-Checker haben.
Wenn in Ihrer App FingerprintManager
verwendet wird, um Nutzern ein Dialogfeld für die Fingerabdruckauthentifizierung anzuzeigen, verwenden Sie stattdessen BiometricPrompt
. BiometricPrompt
greift auf das System zurück, um das Authentifizierungsdialogfeld anzuzeigen. Außerdem passt er sein Verhalten an die Art des biometrischen
Authentifizierung, die der Nutzer ausgewählt hat.
Hardwaresicherheitsmodul
Unterstützte Geräte mit Android 9 oder höher können einen StrongBox Keymaster haben, eine Implementierung des Keymaster HAL, die befindet sich in einem Hardware-Sicherheitsmodul. Das Modul enthält Folgendes:
- Die eigene CPU.
- Sichere Speicherung
- Ein echter Zufallszahlengenerator.
- Zusätzliche Mechanismen zum Schutz vor Paketmanipulationen und nicht autorisiertem Sideloading von Apps.
Bei der Überprüfung von Schlüsseln, die im StrongBox Keymaster gespeichert sind, bestätigt das System eine die Integrität des Schlüssels mit der vertrauenswürdigen Ausführungsumgebung (Trusted Execution Environment, TEE).
Weitere Informationen zur Verwendung von Strongbox Keymaster finden Sie unter Hardware Security Module.
Sicherer Schlüsselimport in den Schlüsselspeicher
Android 9 bietet zusätzliche Sicherheit bei der Schlüsselentschlüsselung, die Möglichkeit, verschlüsselte Schlüssel sicher in den Schlüsselspeicher zu importieren, Mit ASN.1-codiertes Schlüsselformat. Der Keymaster entschlüsselt dann die Schlüssel im Schlüsselspeicher, 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
Android 9 unterstützt das APK-Signaturschema v3. Dieses Schema hat die Option, einen Rotationsnachweis in den Signaturblock aufzunehmen, Zertifikat. Mit dieser Funktion kann Ihre App mit einem neuen Signaturzertifikat signiert werden, indem die bisherigen Signaturzertifikate der APK-Datei mit dem Zertifikat verknüpft werden, mit dem sie jetzt signiert ist.
Weitere Informationen zum Rotieren von Schlüsseln mit apksigner
Option, die Schlüsselentschlüsselung nur auf entsperrten Geräten zuzulassen
In Android 9 wird das Flag unlockedDeviceRequired
eingeführt. Mit dieser Option legen Sie
ob der Schlüsselspeicher vor dem Zugriff auf
Entschlüsselung aller In-Flight- oder gespeicherten Daten mit dem angegebenen Schlüssel. Diese Typen
der Schlüssel eignen sich gut zum Verschlüsseln sensibler Daten auf der Festplatte, z. B.
Gesundheits- oder Unternehmensdaten. Das Flag bietet Nutzern eine höhere Sicherheit, dass die Daten nicht entschlüsselt werden können, während das Gerät gesperrt ist, falls ihr Smartphone verloren geht oder gestohlen wird.
Aktivieren Sie das Flag, um zu verhindern, dass ein Schlüssel entschlüsselt wird, während das Gerät gesperrt ist.
indem Sie true
an setUnlockedDeviceRequired()
übergeben
. Wenn der Bildschirm des Nutzers nach diesem Schritt gesperrt ist, schlagen alle Versuche fehl, Daten mit diesem Schlüssel zu entschlüsseln oder zu signieren. 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 ältere Verschlüsselungsmethoden
Android 9-Geräte, die mit Keymaster 4 ausgeliefert werden, unterstützen den Triple Data Encryption Algorithmus (Triple DES). Wenn Ihre App mit älteren Systemen interoperiert, für die Triple DES erforderlich ist, verwenden Sie diese Chiffre, um vertrauliche Anmeldedaten zu verschlüsseln.
Weitere Informationen dazu, wie du deine App sicherer machen kannst, findest du unter Sicherheit für Android Entwickler:
Einstellung von WPS
Wi-Fi Protected Setup (WPS) wird aus Sicherheitsgründen nicht mehr unterstützt.
Android-Sicherungen
Android 9 bietet neue Funktionen und Entwickleroptionen zum Sichern und Wiederherstellen. Details zu diesen Änderungen finden Sie hier .
Back-ups der clientseitigen Verschlüsselung
Android 9 unterstützt die Verschlüsselung von Android-Sicherungen mit einem Client-seitigen Secrets. Diese Unterstützung wird automatisch aktiviert, wenn die folgenden Bedingungen erfüllt sind:
- Der Nutzer hat unter Android 9 oder höher die Datensicherung aktiviert.
- Der Nutzer hat für sein Gerät eine Displaysperre 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 Back-ups wiederherzustellen, die auf dem Gerät des Nutzers erstellt wurden. Weitere Informationen Weitere Informationen zur Technologie hinter dieser Funktion finden Sie in Google Cloud Key Vault Whitepaper zu Google Workspace.
Gerätebedingungen für die Sicherung definieren
Wenn Ihre App-Daten vertrauliche Informationen oder Einstellungen enthalten, wird Android 9 können Sie ein Gerät definieren, unter welchen Bedingungen Ihre App-Daten sind im Back-up des Nutzers enthalten, z. B. auf Clientseite Verschlüsselung aktiviert ist oder eine lokale Übertragung zwischen Geräten stattfindet.
Weitere Informationen zum Sichern von Daten auf Android-Geräten finden Sie unter Daten sichern Übersicht über die Sicherung.
Bedienungshilfen
Android 9 enthält Verbesserungen am Framework für Barrierefreiheit, mit denen Sie Nutzern Ihrer App noch mehr bieten können.
Navigationssemantische Elemente
Mit den in Android 9 hinzugefügten Attributen kannst du leichter definieren, Bedienungshilfen, insbesondere Screenreader, Bildschirm zu einem anderen zu wechseln. Diese Attribute können sehbehinderten Nutzern helfen, schnell durch den Text in der Benutzeroberfläche Ihrer App navigieren und eine Auswahl treffen können.
In einer Shopping-App kann ein Screenreader Nutzern beispielsweise helfen, direkt von einer Angebotskategorie zur nächsten zu wechseln, ohne dass der Screenreader alle Artikel in einer Kategorie vorlesen muss, bevor er zur nächsten übergeht.
Titel des Bereichs „Bedienungshilfen“
Unter Android 8.1 (API-Ebene 27) und niedriger können Bedienungshilfen nicht immer feststellen, 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 relevanten UI-Elementen, die in der Regel eine Fragment.
In Android 9 können Sie Titel des Bereichs für Bedienungshilfen oder identifizierbare Titel für diese Bereiche. Hat ein Bereich einen Titel für Bedienungshilfen, Bedienungshilfen erhalten detailliertere Informationen, wenn sich das Fenster ändert. Mit dieser Funktion können Dienste dem Nutzer detailliertere Informationen zur Verfügung stellen. was sich in der Benutzeroberfläche geändert hat.
Um den Titel eines Fensters anzugeben, verwenden Sie die
android:accessibilityPaneTitle
. Sie können auch den Titel eines UI-Fensters aktualisieren, das unter
Laufzeit mit setAccessibilityPaneTitle()
.
Sie können beispielsweise einen Titel für den Inhaltsbereich eines Fragment
-Objekts angeben.
Überschriftenbasierte Navigation
Wenn Ihre App Textinhalte mit logischen Überschriften enthält, legen Sie für die Instanzen von View
, die diese Überschriften darstellen, das Attribut android:accessibilityHeading
auf true
fest. Wenn Sie diese Überschriften hinzufügen, können Dienste zur Barrierefreiheit Nutzern helfen, direkt von einer Überschrift zur nächsten zu wechseln. Mit dieser Funktion kann jeder Bedienungshilfendienst die Navigation der Nutzer auf der Benutzeroberfläche verbessern.
Gruppennavigation und -ausgabe
Screenreader verwenden traditionell die
Attribut android:focusable
für
wann sie ein
ViewGroup
oder eine Sammlung von
View
-Objekte als eine Einheit. Auf diese Weise
dass die Ansichten einen logischen Bezug zueinander hatten.
Unter Android 8.1 und niedriger müssen Sie jedes View
-Objekt in einem ViewGroup
als nicht fokussierbar und das ViewGroup
selbst als fokussierbar markieren. Durch diese Anordnung wurden einige Instanzen von View
so markiert, dass sie den Fokus erhalten konnten, was die Tastaturnavigation erschwert hat.
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
Fokus auf alle Elemente legen, für die entweder android:screenReaderFocusable
festgelegt wurde
oder android:focusable
auf true
.
Praktische Aktionen
Android 9 unterstützt die Ausführung von praktischen Aktionen im Namen von Nutzern:
- Interaktion mit Kurzinfos
- Die hinzugefügten Funktionen im Bedienungshilfen-Framework bieten Zugriff auf Tooltips 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 einzublenden oder auszublenden. - Globale Aktionen hinzugefügt
- Android 9 unterstützt jetzt zwei weitere Geräteaktionen in der
AccessibilityService
. Ihr Dienst kann Nutzern helfen, ihre Geräte mit den AktionenGLOBAL_ACTION_LOCK_SCREEN
undGLOBAL_ACTION_TAKE_SCREENSHOT
zu sperren und Screenshots aufzunehmen.
Details zur Fensteränderung
Mit Android 9 können Sie Aktualisierungen der Fenster einer App leichter verfolgen, wenn eine App mehrere Fenster gleichzeitig neu zeichnet. Wenn ein
TYPE_WINDOWS_CHANGED
Ereignis auftritt, verwenden Sie den
getWindowChanges()
API, um zu ermitteln, wie sich die Fenster geändert haben. Während eines Mehrfensterupdates wird jeder
generiert einen eigenen Satz von Ereignissen.
Die Methode getSource()
gibt die Stammansicht des Fensters zurück, die mit jedem Ereignis verknüpft ist.
Wenn eine App Titel für den Bereich „Barrierefreiheit“ 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 auftritt, verwenden Sie die vom
getContentChangeTypes()
um zu ermitteln, wie sich das Fenster geändert hat. So kann das Framework beispielsweise erkennen, wenn ein Bereich einen neuen Titel hat oder 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 auf eine Schaltfläche in der Systemleiste klicken.
Die Auswirkungen auf die Kompatibilität von Apps sind in den meisten Fällen minimal. Wenn Ihre App jedoch ein benutzerdefiniertes Drehungsverhalten hat oder ungewöhnliche Einstellungen für die Bildschirmausrichtung verwendet, kann es zu Problemen kommen, die zuvor unbemerkt geblieben wären, wenn die Nutzereinstellung für die Bildschirmausrichtung immer auf „Hochformat“ festgelegt war. Wir empfehlen Ihnen, das Rotationsverhalten bei allen wichtigen Aktivitäten Ihrer App Stellen Sie sicher, dass alle Einstellungen für die Bildschirmausrichtung weiterhin die eine optimale Nutzererfahrung bieten.
Weitere Informationen finden Sie in den zugehörigen Änderungen am Verhalten.

Mit einem neuen Rotationsmodus können Nutzer die Rotation manuell über eine Schaltfläche in der Systemleiste auslösen.
Text
Android 9 bietet folgende textbezogene Funktionen in der Plattform:
Vorab berechneter Text: Mit der Klasse
PrecomputedText
lässt sich die Leistung des Text-Renderings verbessern, da Sie die erforderlichen Informationen vorab berechnen und im Cache speichern können. Außerdem kann Ihre App das Textlayout nicht nutzen. im Hauptthread.Lupe: Die Klasse
Magnifier
ist ein Plattform-Widget, das eine Lupen-API bereitstellt. So ist die Lupenfunktion in allen Apps einheitlich.Intelligente Verknüpfung: In Android 9 wurde die Klasse
TextClassifier
verbessert. Dabei werden mithilfe von maschinellem Lernen einige Entitäten im ausgewählten Text erkannt und Aktionen vorgeschlagen. MitTextClassifier
kann Ihre App beispielsweise erkennen, dass der Nutzer eine Telefonnummer ausgewählt hat. Ihre App könnte dann vorschlagen, kann der Nutzer diese Nummer verwenden. Die Funktionen inTextClassifier
ersetzen die Funktionen der KlasseLinkify
.Textlayout: Mehrere praktische Methoden und Attribute erleichtern die Implementierung Ihres UI-Designs. Weitere Informationen finden Sie in der Referenzdokumentation zu
TextView
.
Vorab-ART-Konvertierung von DEX-Dateien
Auf Geräten mit Android 9 oder höher: (ART) optimiert die komprimierte Dalvik Executable-Datei durch den vorzeitigen Compiler DEX-Dateien zu formatieren, indem Sie die DEX-Dateien in einem App-Paket in ein kompakte Darstellung. Dadurch kann Ihre App schneller gestartet werden und benötigt weniger Speicherplatz und RAM.
Diese Verbesserung kommt vor allem Low-End-Geräten mit langsameren Laufwerk-E/A-Geschwindigkeiten zugute.
System-Tracing auf dem Gerät
Mit Android 9 können Sie System-Traces von Ihrem Gerät aufzeichnen, und geben Sie einen Bericht zu diesen Aufzeichnungen an Ihr Entwicklungsteam weiter. Dieser Bericht wird in mehreren Formaten unterstützt, darunter HTML.
Wenn Sie diese Protokolle erfassen, können Sie Zeitdaten zu den Prozessen und Threads Ihrer App erfassen und sich andere Arten von global relevanten Gerätestatus ansehen.
Weitere Informationen zu diesem Tool findest du unter System auf dem Gerät ausführen Tracing