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 App testen und gegebenenfalls entsprechend anpassen.
Lesen Sie sich auch die Liste der Verhaltensänderungen durch, die sich nur auf Apps mit Targeting auf Android 13 auswirken.
Leistung und Akku
Task-Manager
Ab Android 13 (API-Level 33) können Nutzer über die Benachrichtigungsleiste einen Workflow ausführen, um Apps mit laufenden Diensten im Vordergrund zu beenden, wie in Abbildung 1 dargestellt. Diese Aufforderung wird als Task-Manager bezeichnet. Apps müssen in der Lage sein, das vom Nutzer initiierte Beenden zu verarbeiten.
Job-Vorabverarbeitung mit JobScheduler verbessern
Mit JobScheduler können Apps bestimmte Jobs als „prefetch“-Jobs kennzeichnen (mit JobInfo.Builder.setPrefetch()
). Das bedeutet, dass sie idealerweise kurz vor und vor dem nächsten App-Start ausgeführt werden sollten, um die Nutzerfreundlichkeit zu verbessern.
Bisher hat JobScheduler das Signal nur verwendet, um Jobs für das Vorabladen zu ermöglichen, die opportunistisch freien oder überschüssigen Daten nutzen.
Unter Android 13 (API-Level 33) und höher versucht das System, die nächste Ausführung einer App zu ermitteln, und verwendet diese Schätzung, um Prefetch-Jobs auszuführen. Apps sollten prefetch-Jobs für alle Aufgaben verwenden, die vor dem nächsten Start der App ausgeführt werden sollen.
Akkunutzung
Android 13 (API-Level 33) bietet dem System folgende Möglichkeiten, die Akkulaufzeit des Geräts besser zu verwalten:
- Aktualisierte Regeln dazu, wann das System Ihre App in den App-Standby-Bucket „eingeschränkt“ verschiebt.
- 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.
Achten Sie beim Testen Ihrer App mit diesen Änderungen auf Folgendes:
Testen Sie, wie Ihre App reagiert, wenn das System sie in den App-Standby-Bucket „eingeschränkt“ verschiebt. Weisen Sie Ihre Anwendung mit dem folgenden ADB-Befehl (Android Debug Bridge) diesem Bucket zu:
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.
- Wecker werden nicht 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 Messaging) mit hoher Priorität
In Android 13 (API-Level 33) wurden die Firebase Cloud Messaging-(FCM-)Kontingente aktualisiert, um die Zuverlässigkeit der FCM-Zustellung mit hoher Priorität für Apps zu verbessern, die Benachrichtigungen als Reaktion auf FCM-Nachrichten mit hoher Priorität anzeigen. Folgendes hat sich in Android 13 (API-Level 33) geändert:
- Anhand von App-Standby-Buckets wird nicht mehr festgelegt, wie viele FCMs mit hoher Priorität eine App verwenden kann.
- Die FCM-Kontingente für Benachrichtigungen mit hoher Priorität werden proportional zur Anzahl der Benachrichtigungen skaliert, die dem Nutzer als Reaktion auf FCM-Benachrichtigungen 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 Sie Dienste im Vordergrund (Foreground Services, FGS) als Reaktion auf eine FCM-Nachricht starten, empfehlen wir, das Ergebnis von RemoteMessage.getPriority()
zu prüfen und zu bestätigen, dass es PRIORITY_HIGH
ist und/oder alle potenziellen ForegroundServiceStartNotAllowedException
-Ausnahmen verarbeitet werden.
Wenn Ihre Anwendung nicht immer Benachrichtigungen als Reaktion auf FCMs mit hoher Priorität postet, 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
.
So können sich Nutzer auf die Benachrichtigungen konzentrieren, die für sie am wichtigsten sind.
Wir empfehlen Ihnen dringend, so bald wie möglich Android 13 oder höher als Zielversion festzulegen, um von der zusätzlichen Kontrolle und Flexibilität dieser Funktion zu profitieren.
Weitere Informationen zu Best Practices für App-Berechtigungen
Sensible Inhalte in Zwischenablage ausblenden
Wenn Nutzer in Ihrer App vertrauliche Inhalte wie Passwörter oder Kreditkartendaten in die Zwischenablage kopieren können, müssen Sie vor dem Aufruf von ClipboardManager#setPrimaryClip()
ein Flag zu ClipDescription
von ClipData hinzufügen. Wenn Sie dieses Flag hinzufügen, werden sensible Inhalte nicht in der Inhaltsvorschau angezeigt.
Fügen Sie dem ClipDescription
ein boolesches Extra hinzu, um sensible Inhalte zu kennzeichnen. Das sollte für alle Apps 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 der Zwischenablage finden Sie auf der Seite Kopieren und Einfügen.
Sicherheit
Von der freigegebenen Nutzer-ID migrieren
Wenn Ihre App das eingestellte Attribut android:sharedUserId
verwendet und nicht mehr von der Funktion des Attributs abhängt, 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 nicht mehr auf eine freigegebene Nutzer-ID angewiesen ist. Wenn Ihre App android:sharedUserMaxSdkVersion
deklariert und neu auf Geräten mit Android 13 oder höher installiert wird, verhält sie sich so, als hätten Sie android:sharedUserId
nie definiert. Für aktualisierte Apps wird weiterhin die vorhandene freigegebene Nutzer-ID verwendet.
Freigegebene Nutzer-IDs führen zu nicht deterministischem Verhalten im Paketmanager. Ihre App sollte stattdessen geeignete Kommunikationsmechanismen wie Dienste und Inhaltsanbieter verwenden, um die Interoperabilität zwischen freigegebenen 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
Alte Kopie der Sprachdienstimplementierung entfernt
In Android 13 wird die SpeechService
-Implementierung aus der Google App entfernt, einschließlich der Sprach-IME, RecognitionService
und einer intentbasierten API.
In Android 12 wurden die folgenden Änderungen vorgenommen:
SpeechService
-Funktionen wurden in die App „Sprachdienste von Google“ migriert, die zum Standardanbieter fürSpeechService
wurde.- Die
RecognitionService
-Funktion wurde in die Android System Intelligence App verschoben, um die On-Device-Spracherkennung zu unterstützen.
Um die App-Kompatibilität unter Android 12 aufrechtzuerhalten, verwendet die Google App ein Trampolin, um den Traffic an die App „Sprachdienste von Google“ weiterzuleiten. In Android 13 wird dieses Trampolin entfernt.
Apps sollten für SpeechService
den Standardanbieter des Geräts verwenden, anstatt eine bestimmte App hartzucodieren.