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, wenn sie unter Android 13 ausgeführt werden, unabhängig von targetSdkVersion
. Sie sollten Ihre App testen und sie dann bei Bedarf so anpassen, dass sie diese richtig unterstützt.
Sehen Sie sich auch die Liste der Verhaltensänderungen an, die sich nur auf Apps auswirken, die auf Android 13 ausgerichtet sind.
Leistung und Akku
Task-Manager
Ab Android 13 (API‑Level 33) können Nutzer einen Workflow über die Benachrichtigungsleiste ausführen, um Apps mit laufenden Vordergrunddiensten zu beenden (siehe Abbildung 1). Diese Funktion wird als Task Manager bezeichnet. Apps müssen mit diesem vom Nutzer initiierten Stopp umgehen können.
Verarbeitung von Prefetch-Jobs mit JobScheduler verbessern
Mit JobScheduler können Apps bestimmte Jobs als „Prefetch“-Jobs (mithilfe von JobInfo.Builder.setPrefetch()
) markieren. Diese sollten idealerweise kurz vor dem nächsten App-Start ausgeführt werden, um die Nutzerfreundlichkeit zu verbessern.
Bisher wurde das Signal in JobScheduler nur verwendet, damit Vorabruf-Jobs bei Bedarf kostenlose oder überschüssige Daten nutzen können.
Unter Android 13 (API-Level 33) und höher versucht das System, den Zeitpunkt zu ermitteln, zu dem eine App das nächste Mal gestartet wird, und verwendet diese Schätzung, um Prefetch-Jobs auszuführen. Apps sollten versuchen, Vorabruf-Jobs für alle Aufgaben zu verwenden, die vor dem nächsten App-Start ausgeführt werden sollen.
Akkunutzung
Unter Android 13 (API‑Level 33) kann das System die Akkulaufzeit des Geräts auf folgende Weise besser verwalten:
- Aktualisierte Regeln dazu, wann das System Ihre App in den App-Standby-Bucket „eingeschränkt“ einordnet.
- Neue Einschränkungen für die Arbeit, die Ihre App ausführen kann, wenn der Nutzer Ihre App in den eingeschränkten Zustand für die Akkunutzung im Hintergrund 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 mit der Einschränkung „restricted“ 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 in der Regel für Apps gelten, die sich in einem eingeschränkten Zustand für die Akkunutzung im Hintergrund befinden:
- 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 diesen eingeschränkten Zustand zu versetzen:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Kontingente für Firebase Cloud Messaging-Nachrichten (FCM) mit hoher Priorität
Mit Android 13 (API‑Level 33) werden die Firebase Cloud Messaging-Kontingente (FCM) aktualisiert, um die Zuverlässigkeit der FCM-Übermittlung mit hoher Priorität für Apps zu verbessern, die Benachrichtigungen als Reaktion auf FCMs mit hoher Priorität anzeigen. In Android 13 (API‑Level 33) hat sich Folgendes geändert:
- Die App Standby Buckets bestimmen nicht mehr, wie viele FCMs mit hoher Priorität eine App verwenden kann.
- Das System stuft Nachrichten mit hoher Priorität jetzt herab, wenn es erkennt, dass eine App regelmäßig Nachrichten mit hoher Priorität sendet, die nicht zu einer Benachrichtigung führen.
Wie in früheren Android-Versionen werden FCMs mit hoher Priorität, die das Kontingent überschreiten, auf normale Priorität herabgestuft. Wenn Sie Vordergrunddienste (Foreground Services, FGS) als Reaktion auf eine FCM 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 zu verarbeiten.
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 Laufzeitberechtigung für Benachrichtigungen eingeführt: POST_NOTIFICATIONS
.
Diese Änderung soll Nutzern helfen, sich auf die für sie wichtigsten Benachrichtigungen zu konzentrieren.
Wir empfehlen dringend, so bald wie möglich Android 13 oder höher als Ziel zu verwenden, um die zusätzlichen Kontroll- und Flexibilitätsmöglichkeiten dieser Funktion zu nutzen.
Weitere Informationen zu Best Practices für App-Berechtigungen
Sensible Inhalte aus der Zwischenablage ausblenden
Wenn Nutzer in Ihrer App vertrauliche Inhalte wie Passwörter oder Kreditkarteninformationen in die Zwischenablage kopieren können, müssen Sie dem ClipDescription
von ClipData ein Flag hinzufügen, bevor Sie ClipboardManager#setPrimaryClip()
aufrufen. Wenn Sie dieses Flag hinzufügen, wird verhindert, dass sensible Inhalte in der Inhaltsvorschau angezeigt werden.


Wenn Sie sensible Inhalte kennzeichnen möchten, fügen Sie dem ClipDescription
ein boolesches Extra hinzu. 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 für die Zwischenablage finden Sie auf der Funktionsseite Kopieren und Einfügen.
Sicherheit
Von der gemeinsamen Nutzer-ID migrieren
Wenn Ihre App das eingestellte Attribut android:sharedUserId
verwendet und nicht mehr von der Funktionalität des Attributs abhängt, können Sie das Attribut android:sharedUserMaxSdkVersion
auf 32
setzen, 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 gemeinsame Nutzer-ID angewiesen ist. Wenn in Ihrer App android:sharedUserMaxSdkVersion
deklariert ist und sie auf Geräten mit Android 13 oder höher neu installiert wird, verhält sich Ihre App so, als hätten Sie android:sharedUserId
nie definiert. Aktualisierte Apps verwenden weiterhin die vorhandene gemeinsame Nutzer-ID.
Gemeinsam genutzte User-IDs führen zu nicht deterministischem Verhalten im Paketmanager. Stattdessen sollte Ihre App geeignete Kommunikationsmechanismen wie Dienste und Contentanbieter verwenden, um die Interoperabilität zwischen freigegebenen Komponenten zu ermöglichen.
Nutzererfahrung
Benachrichtigungen für Dienste im Vordergrund, die geschlossen werden können
Auf Geräten mit Android 13 oder höher können Nutzer Benachrichtigungen, die mit Vordergrunddiensten verknüpft sind, standardmäßig schließen.
Hauptfunktion
Legacy-Kopie der Sprachdienstimplementierung entfernt
In Android 13 wird die SpeechService
-Implementierung aus der Google App entfernt, einschließlich Voice IME, RecognitionService
und einer intentbasierten API.
In Android 12 wurden die folgenden Änderungen vorgenommen:
- Die
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 einen Trampolin-Mechanismus, um Traffic an die Speech Services by Google App weiterzuleiten. Unter Android 13 wurde dieser Mechanismus entfernt.
Apps sollten den Standardanbieter des Geräts für SpeechService
verwenden, anstatt eine bestimmte App fest zu codieren.