Die Android 13-Plattform enthält Verhaltensänderungen, die sich auf Ihre App auswirken können. Die folgenden Verhaltensänderungen gelten für alle Apps, die unter Android 13 ausgeführt werden, unabhängig von targetSdkVersion
. Sie sollten Ihre Anwendung testen und dann bei Bedarf anpassen, damit diese korrekt unterstützt werden.
Sieh dir auch die Liste der Verhaltensänderungen an, die nur Apps betreffen, die auf Android 13 ausgerichtet sind.
Leistung und Akku
Task-Manager
Ab Android 13 (API-Level 33) können Nutzer über die Benachrichtigungsleiste einen Workflow abschließen, um Apps zu beenden, für die Dienste im Vordergrund ausgeführt werden (siehe Abbildung 1). Diese Option wird als Task-Manager bezeichnet. Apps müssen in der Lage sein, dieses vom Nutzer initiierte Beenden zu verarbeiten.
Verarbeitung von Prefetch-Jobs mit JobScheduler verbessern
JobScheduler bietet Anwendungen die Möglichkeit, bestimmte Jobs als "Prefetch"-Jobs zu kennzeichnen (mithilfe von JobInfo.Builder.setPrefetch()
). Das bedeutet, dass sie idealerweise in der Nähe und vor der nächsten Anwendungseinführung ausgeführt werden sollten, um die Nutzerfreundlichkeit zu verbessern.
In der Vergangenheit hat JobScheduler nur das Signal verwendet, um Prefetch-Jobs opportunistisch kostenlose oder überschüssige Daten zu ermöglichen.
Ab Android 13 (API-Level 33) versucht das System zu ermitteln, wann eine App das nächste Mal gestartet wird, und verwendet diese Schätzung, um Prefetch-Jobs auszuführen. Anwendungen sollten versuchen, Prefetch-Jobs für alle Aufgaben zu verwenden, die vor dem nächsten Anwendungsstart erledigt werden sollen.
Akkuressourcennutzung
Android 13 (API-Level 33) bietet dem System die folgenden Möglichkeiten, die Akkulaufzeit des Geräts besser zu verwalten:
- Die Regeln dazu, wann das System Ihre Anwendung in den "eingeschränkten" App-Standby-Bucket platziert, wurden aktualisiert.
- Neue Einschränkungen bei der Arbeit, die Ihre App ausführen kann, wenn der Nutzer Ihre App für die Akkunutzung im Hintergrund in den Status „Eingeschränkt“ versetzt.
Prüfen Sie Folgendes, wenn Sie Ihre Anwendung mit diesen Änderungen testen:
Testen Sie, wie Ihre App reagiert, wenn sie vom System in den "eingeschränkten" App-Standby-Bucket verschoben wird. Verwenden Sie den folgenden ADB-Befehl (Android Debug Bridge), um die Anwendung diesem Bucket zuzuweisen:
adb shell am set-standby-bucket PACKAGE_NAME restricted
Teste, wie deine App auf die folgenden Einschränkungen reagiert, die häufig für Apps mit dem eingeschränkten Akkuverbrauch im Hintergrund gelten:
- Dienste im Vordergrund können nicht gestartet werden
- Vorhandene Dienste im Vordergrund werden aus dem Vordergrund entfernt
- Es werden keine Wecker ausgelöst
- Jobs werden nicht ausgeführt
Verwenden Sie den folgenden ADB-Befehl, um Ihre App in den eingeschränkten Status zu versetzen:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
FCM-Kontingente (Firebase Cloud Message) mit hoher Priorität
Unter Android 13 (API-Level 33) werden die FCM-Kontingente (Firebase Cloud Messaging) aktualisiert, um die Zuverlässigkeit der FCM-Zustellung mit hoher Priorität für Apps zu verbessern, die Benachrichtigungen als Reaktion auf FCMs mit hoher Priorität anzeigen. Folgendes hat sich in Android 13 (API-Level 33) geändert:
- App-Standby-Buckets bestimmen nicht mehr, wie viele FCMs mit hoher Priorität eine App verwenden kann.
- FCM-Kontingente mit hoher Priorität skalieren proportional zur Anzahl der Benachrichtigungen, die dem Nutzer als Reaktion auf FCMs mit hoher Priorität angezeigt werden.
Wie in früheren Android-Versionen werden FCMs mit hoher Priorität, die das Kontingent überschreiten, auf die normale Priorität herabgestuft. Wenn du Dienste im Vordergrund als Reaktion auf einen FCM startest, solltest du das Ergebnis von RemoteMessage.getPriority()
prüfen und bestätigen, dass es PRIORITY_HIGH
ist und/oder mögliche ForegroundServiceStartNotAllowedException
-Ausnahmen verarbeitet.
Wenn Ihre Anwendung nicht immer Benachrichtigungen als Reaktion auf FCMs mit hoher Priorität veröffentlicht, empfehlen wir, die Priorität dieser FCMs in Normal zu ändern, damit die Nachrichten, die zu einer Benachrichtigung führen, nicht herabgestuft werden.
Datenschutz
Laufzeitberechtigung für Benachrichtigungen
Mit Android 13 (API-Level 33) wird eine Laufzeitbenachrichtigungsberechtigung eingeführt: POST_NOTIFICATIONS
.
Durch diese Änderung können sich Nutzer auf die Benachrichtigungen konzentrieren, die für sie am wichtigsten sind.
Wir empfehlen dringend, die Ausrichtung so bald wie möglich auf Android 13 oder höher vorzunehmen, um von den zusätzlichen Steuerungsmöglichkeiten und der Flexibilität dieser Funktion profitieren zu können.
Weitere Informationen zu Best Practices für App-Berechtigungen
Sensible Inhalte in Zwischenablage ausblenden
Wenn Nutzer in deiner App vertrauliche Inhalte wie Passwörter oder Kreditkartendaten in die Zwischenablage kopieren können, musst du dem ClipDescription
von ClipData ein Flag hinzufügen, bevor du ClipboardManager#setPrimaryClip()
aufrufst. Durch das Hinzufügen dieses Flags wird verhindert, dass sensible Inhalte in der Inhaltsvorschau angezeigt werden.
Fügen Sie dem ClipDescription
ein boolesches Extra hinzu, um sensible Inhalte zu kennzeichnen. Dies sollte für alle Anwendungen gelten, unabhängig vom Ziel-API-Level.
// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
Weitere Informationen zur neuen Benutzeroberfläche für die Zwischenablage finden Sie auf der Feature-Seite Kopieren und Einfügen.
Sicherheit
Von freigegebener Nutzer-ID migrieren
Wenn Ihre App das verworfene Attribut android:sharedUserId
verwendet und nicht mehr von der Funktionalität des Attributs abhängig ist, können Sie das Attribut android:sharedUserMaxSdkVersion
auf 32
festlegen, wie im folgenden Code-Snippet gezeigt:
<manifest ...> <!-- To maintain backward compatibility, continue to use "android:sharedUserId" if you already added it to your manifest. --> android:sharedUserId="SHARED_PACKAGE_NAME" android:sharedUserMaxSdkVersion="32" ... </manifest>
Dieses Attribut teilt dem System mit, dass Ihre App keine gemeinsame Nutzer-ID mehr benötigt. Wenn für deine App android:sharedUserMaxSdkVersion
deklariert ist und sie auf Geräten mit Android 13 oder höher neu installiert wird, verhält sich deine App so, als hättest du android:sharedUserId
nie definiert. Aktualisierte Apps verwenden weiterhin die vorhandene freigegebene Nutzer-ID.
Freigegebene Nutzer-IDs verursachen ein nicht deterministisches Verhalten im Paketmanager. Ihre App sollte stattdessen geeignete Kommunikationsmechanismen wie Dienste und Contentanbieter verwenden, um die Interoperabilität zwischen gemeinsam genutzten Komponenten zu ermöglichen.
Nutzererfahrung
Benachrichtigungen zu Diensten im Vordergrund schließen
Auf Geräten mit Android 13 oder höher können Nutzer standardmäßig Benachrichtigungen schließen, die mit Diensten im Vordergrund verknüpft sind.
Hauptfunktion
Legacy-Version des Sprachdienstes entfernt
Unter Android 13 wird die SpeechService
-Implementierung aus der Google App entfernt, einschließlich Voice-IME, RecognitionService
und einer Intent-basierten API.
In Android 12 wurden die folgenden Änderungen vorgenommen:
SpeechService
-Funktionen wurden zur Sprachdienste-App von Google migriert, die zum StandardanbieterSpeechService
wurde.- Die
RecognitionService
-Funktion wurde in die Android System Intelligence App verschoben, um die Spracherkennung auf dem Gerät zu unterstützen.
Damit die Kompatibilität der App unter Android 12 gewahrt bleibt, wird in der Google App ein Trampolin verwendet, um den Traffic an die App „Sprachdienste von Google“ weiterzuleiten. In Android 13 wird dieses Trampolin entfernt.
Apps sollten den Standardanbieter des Geräts für SpeechService
verwenden, anstatt eine bestimmte App fest zu programmieren.