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 gegebenenfalls so ändern, dass sie diese Änderungen 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 zu beenden, die laufende Vordergrunddienste haben (siehe Abbildung 1). Diese Funktion wird als Task-Manager bezeichnet. Apps müssen in der Lage sein, diese vom Nutzer initiierte Beendigung zu verarbeiten.
Verarbeitung von Prefetch-Jobs mit JobScheduler verbessern
Mit JobScheduler können Apps bestimmte Jobs als Prefetch-Jobs kennzeichnen (mithilfe von JobInfo.Builder.setPrefetch()). Das bedeutet, dass sie idealerweise
kurz vor dem nächsten App-Start ausgeführt werden sollten, um die Nutzerfreundlichkeit zu verbessern.
Bisher hat JobScheduler das Signal nur verwendet, damit Prefetch-Jobs opportunistisch kostenlose oder überschüssige Daten nutzen können.
Unter Android 13 (API‑Level 33) und höher versucht das System, den nächsten Zeitpunkt zu ermitteln, an dem eine App gestartet wird, und verwendet diese Schätzung, um Prefetch-Jobs auszuführen. Apps sollten Prefetch-Jobs für alle Aufgaben verwenden, die vor dem nächsten App-Start erledigt werden sollen.
Akkunutzung
Unter Android 13 (API‑Level 33) gibt es folgende Möglichkeiten, mit denen das System die Akkulaufzeit des Geräts besser verwalten kann:
- Aktualisierte Regeln, wann das System Ihre App in den App Standby-Bucket „Eingeschränkt“ verschiebt.
- Neue Einschränkungen für die Aufgaben, die Ihre App ausführen kann, wenn der Nutzer sie für die Akkunutzung im Hintergrund in den Status „Eingeschränkt“ versetzt.
Wenn Sie Ihre App mit diesen Änderungen testen, sollten Sie Folgendes prüfen:
Testen Sie, wie Ihre App reagiert, wenn das System sie in den App-Standby-Bucket „Eingeschränkt“ verschiebt. Verwenden Sie den folgenden Android Debug Bridge-Befehl (ADB), 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 gelten, die für die Akkunutzung im Hintergrund in den Status „Eingeschränkt“ versetzt wurden:
- Vordergrunddienste können nicht gestartet werden
- Vorhandene Vordergrunddienste werden aus dem Vordergrund entfernt
- Alarme werden nicht ausgelöst
- Jobs werden nicht ausgeführt
Verwenden Sie den folgenden ADB-Befehl, um Ihre App in diesen Status „Eingeschränkt“ zu versetzen:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Hohe Kontingente für Firebase Cloud Messaging (FCM)
Unter Android 13 (API‑Level 33) werden die Kontingente für Firebase Cloud Messaging (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. Unter Android 13 (API‑Level 33) hat sich Folgendes geändert:
- 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 feststellt, 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 als Reaktion auf eine FCM-Nachricht Vordergrunddienste (FGS) 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 sendet, empfehlen wir, die Priorität dieser FCMs auf Normal zu ändern, damit die Nachrichten, die zu einer Benachrichtigung führen, nicht herabgestuft werden.
Datenschutz
Laufzeitberechtigung für Benachrichtigungen
Unter Android 13 (API‑Level 33) wird eine Laufzeit-
Berechtigung zum Senden von Benachrichtigungen eingeführt:
POST_NOTIFICATIONS.
Diese Änderung hilft Nutzern, sich auf die Benachrichtigungen zu konzentrieren, die für sie am wichtigsten sind.
Wir empfehlen dringend, so bald wie möglich auf Android 13 oder höher auszurichten, um die Vorteile der zusätzlichen Kontrolle und Flexibilität dieser Funktion zu nutzen.
Weitere Informationen zu Best Practices für App-Berechtigungen.
Sensible Inhalte aus der Zwischenablage ausblenden
Wenn Ihre App Nutzern das Kopieren sensibler Inhalte wie Passwörter oder Kreditkarteninformationen in die Zwischenablage ermöglicht, müssen Sie vor dem Aufrufen von ClipboardManager#setPrimaryClip() ein Flag zu ClipDescription von ClipData hinzufügen. Durch Hinzufügen dieses Flags wird verhindert, dass sensible Inhalte in der Inhaltsvorschau angezeigt werden.
Fügen Sie ClipDescription ein boolesches Extra hinzu, um sensible Inhalte zu kennzeichnen. Alle Apps sollten dies tun, 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 UI der Zwischenablage finden Sie auf der Seite Kopieren und Einfügen.
Sicherheit
Von der freigegebenen Nutzer‑ID migrieren
Wenn Ihre App das eingestellte
android:sharedUserId Attribut
verwendet und nicht mehr von der Funktion des Attributs abhängig ist, können Sie das
android:sharedUserMaxSdkVersion
Attribut 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 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 sich Ihre App so, als hätten Sie android:sharedUserId nie definiert. Aktualisierte Apps verwenden weiterhin die vorhandene freigegebene Nutzer‑ID.
Freigegebene Nutzer‑IDs verursachen nicht deterministisches Verhalten im Paketmanager. Ihre App sollte stattdessen geeignete Kommunikationsmechanismen wie Dienste und Contentanbieter verwenden, um die Interoperabilität zwischen freigegebenen Komponenten zu erleichtern.
Nutzer
Benachrichtigungen für Dienste im Vordergrund können verworfen werden
Auf Geräten mit Android 13 oder höher können Nutzer Benachrichtigungen , die mit Vordergrund diensten verknüpft sind, standardmäßig verwerfen.
Hauptfunktion
Legacy-Kopie der Implementierung des Sprachdienstes entfernt
Unter Android 13 wird die SpeechService Implementierung, einschließlich
Voice IME, RecognitionService
und einer intentbasierten
API, aus
der Google App entfernt.
Unter Android 12 wurden folgende Änderungen vorgenommen:
SpeechService-Funktionen wurden in die App „Sprachdienste von Google “ migriert, die zum Standardanbieter vonSpeechServicewurde.RecognitionService-Funktionen wurden in die App „Android System Intelligence“ verschoben, um die Spracherkennung auf dem Gerät zu unterstützen.
Um die App-Kompatibilität unter Android 12 aufrechtzuerhalten, verwendet die Google App einen Trampolin, um den Traffic zur App „Sprachdienste von Google“ umzuleiten. Unter Android 13 wird dieser Trampolin entfernt.
Apps sollten den Standardanbieter des Geräts für SpeechService verwenden, anstatt eine bestimmte App fest zu codieren.