Die Android 13-Plattform umfasst Verhaltensänderungen, die sich auf Ihre App auswirken können. Die folgenden Änderungen gelten für alle Apps, wenn sie unter Android 13 ausgeführt werden, unabhängig von targetSdkVersion
. Sie sollten Ihre Anwendung testen und dann bei Bedarf ändern, damit diese ordnungsgemäß unterstützt werden.
Sieh dir unbedingt auch die Liste der Änderungen des Verhaltens, die sich nur auf Apps auswirken, die auf Android 13 ausgerichtet sind an.
Leistung und Akku
Task-Manager
Ab Android 13 (API-Level 33) können Nutzer einen Workflow von der Benachrichtigungsleiste aus ausführen, um Apps mit laufenden Diensten im Vordergrund zu beenden, wie in Abbildung 1 dargestellt. Dieses Angebot wird als Task-Manager bezeichnet. Apps müssen dieses vom Nutzer initiierte Beenden verarbeiten können.
Verarbeitung von Prefetch-Jobs mit JobScheduler verbessern
JobScheduler bietet Anwendungen die Möglichkeit, bestimmte Jobs als „Prefetch-Jobs“ zu markieren (mit JobInfo.Builder.setPrefetch()
), sodass sie idealerweise nahe und vor dem nächsten App-Start ausgeführt werden sollten, um die Nutzerfreundlichkeit zu verbessern.
In der Vergangenheit hat JobScheduler das Signal nur verwendet, um Prefetch-Jobs opportunistisch kostenlose oder überschüssige Daten zu nutzen.
In Android 13 (API-Level 33) und höher versucht das System, den nächsten Start einer App zu ermitteln, und verwendet diese Schätzung, um Prefetch-Jobs auszuführen. Anwendungen sollten versuchen, Prefetch-Jobs für jede Arbeit zu verwenden, die sie vor dem nächsten Start der Anwendung erledigen möchten.
Verbrauch von Akkuressourcen
Android 13 (API-Level 33) bietet dem System folgende Möglichkeiten, die Akkulaufzeit des Geräts besser zu verwalten:
- Die Regeln dazu, wann das System Ihre App im eingeschränkten App-Stand-by-Bucket platziert, wurden aktualisiert.
- Es gibt neue Einschränkungen für die Arbeit Ihrer App, die ausgeführt werden kann, wenn der Nutzer sie für die Nutzung des Hintergrundakkus in den Status „Eingeschränkt“ versetzt.
Prüfen Sie beim Testen Ihrer Anwendung mit diesen Änderungen Folgendes:
Testen Sie, wie Ihre App reagiert, wenn das System sie im eingeschränkten App-Standby-Bucket platziert. Verwenden Sie den folgenden ADB-Befehl (Android Debug Bridge), um Ihre App diesem Bucket zuzuweisen:
adb shell am set-standby-bucket PACKAGE_NAME restricted
Testen Sie, wie Ihre App auf die folgenden Einschränkungen reagiert, die häufig für Apps mit dem Status Eingeschränkt für die Akkunutzung im Hintergrund gelten:
- Dienste im Vordergrund können nicht gestartet werden
- Vorhandene Dienste im Vordergrund werden aus dem Vordergrund entfernt
- Wecker werden nicht ausgelöst
- Jobs werden nicht ausgeführt
Verwenden Sie den folgenden ADB-Befehl, um Ihre App in den Status „Eingeschränkt“ zu versetzen:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Firebase Cloud Message-Kontingente (FCM) mit hoher Priorität
Unter Android 13 (API-Level 33) werden die Kontingente für Firebase Cloud Messaging (FCM) aktualisiert, um die Zuverlässigkeit der FCM-Bereitstellung 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 werden proportional zur Anzahl der Benachrichtigungen skaliert, die dem Nutzer als Antwort auf FCMs mit hoher Priorität angezeigt werden.
Wie in früheren Android-Versionen wird für FCMs mit hoher Priorität, die das Kontingent überschreiten, ein Downgrade auf die normale Priorität durchgeführt. Wenn Sie als Reaktion auf einen FCM Dienste im Vordergrund starten, sollten Sie das Ergebnis von RemoteMessage.getPriority()
prüfen und bestätigen, dass es PRIORITY_HIGH
ist, und/oder potenzielle ForegroundServiceStartNotAllowedException
-Ausnahmen handhaben.
Wenn Ihre Anwendung nicht immer Benachrichtigungen als Reaktion auf FCMs mit hoher Priorität sendet, empfehlen wir Ihnen, 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 für sie wichtigsten Benachrichtigungen konzentrieren.
Wir empfehlen dringend, so schnell wie möglich eine Ausrichtung auf Android 13 oder höher vorzunehmen, um die zusätzliche Kontrolle und Flexibilität dieser Funktion zu nutzen.
Weitere Informationen zu Best Practices für App-Berechtigungen
Vertrauliche Inhalte aus Zwischenablage ausblenden
Wenn deine App es Nutzern ermöglicht, vertrauliche Inhalte wie Passwörter oder Kreditkartendaten in die Zwischenablage zu kopieren, musst du der ClipDescription
von ClipData ein Flag hinzufügen, bevor du ClipboardManager#setPrimaryClip()
aufrufst. Durch Hinzufügen dieses Flags wird verhindert, dass sensible Inhalte in der Inhaltsvorschau angezeigt werden.
Um sensible Inhalte zu kennzeichnen, fügen Sie ClipDescription
einen booleschen Extrapunkt hinzu. Das sollte bei allen Apps geschehen, 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 Funktionsseite Kopieren und Einfügen.
Sicherheit
Von freigegebener Nutzer-ID migrieren
Wenn Ihre App das eingestellte 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 in Ihrer App android:sharedUserMaxSdkVersion
deklariert ist und auf Geräten mit Android 13 oder höher neu installiert wird, verhält sich die App so, als ob Sie android:sharedUserId
nie definiert hätten. Aktualisierte Apps verwenden weiterhin die vorhandene freigegebene Nutzer-ID.
Freigegebene Nutzer-IDs verursachen im Paketmanager ein nicht deterministisches Verhalten. Ihre App sollte stattdessen geeignete Kommunikationsmechanismen wie Dienste und Contentanbieter verwenden, um die Interoperabilität zwischen gemeinsam genutzten Komponenten zu erleichtern.
Nutzererfahrung
Ausgeblendete Benachrichtigungen zu Diensten im Vordergrund
Auf Geräten mit Android 13 oder höher können Nutzer Benachrichtigungen zu Diensten im Vordergrund standardmäßig schließen.
Hauptfunktion
Legacy-Implementierung des Sprachdienstes entfernt
Unter Android 13 wird die SpeechService
-Implementierung – einschließlich Voice IME, RecognitionService
und einer absichtsbasierten API – aus der Google App entfernt.
In Android 12 wurden folgende Änderungen vorgenommen:
SpeechService
-Funktionen wurden zur App Sprachdienste von Google migriert, die zum standardmäßigenSpeechService
-Anbieter wurde.- Die Funktion
RecognitionService
wurde in die Android System Intelligence App verschoben, um die Spracherkennung auf dem Gerät zu unterstützen.
Um die App-Kompatibilität unter Android 12 aufrechtzuerhalten, verwendet die Google-App ein Trampolin, um den Verkehr zur App „Sprachdienste von Google“ umzuleiten. Bei Android 13 wird dieses Trampolin entfernt.
Anwendungen sollten für SpeechService
den Standardanbieter des Geräts verwenden, anstatt eine bestimmte App hartzucodieren.