Verhaltensänderungen: alle Apps

Die Android 13-Plattform enthält Verhaltensänderungen, die sich auf deine 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 dann gegebenenfalls so anpassen, dass diese Funktionen ordnungsgemäß unterstützt werden.

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

Unten im Benachrichtigungsbereich befindet sich eine Schaltfläche, die die Anzahl der Apps anzeigt, die derzeit im Hintergrund ausgeführt werden. Wenn du auf diese Schaltfläche drückst, wird ein Dialogfeld mit den Namen verschiedener Apps angezeigt. Die Schaltfläche „Beenden“ befindet sich rechts neben jeder App.
Abbildung 1. Workflow für den Task-Manager, mit dem Nutzer Apps beenden können, die laufende Dienste im Vordergrund haben. Dieser Workflow wird nur auf Geräten mit Android 13 oder höher angezeigt.

Ab Android 13 (API-Level 33) können Nutzer einen Workflow über die Benachrichtigungsleiste ausführen, um Apps mit laufenden Diensten im Vordergrund zu beenden, wie in Abbildung 1 dargestellt. Diese Funktion wird als Task-Manager bezeichnet. Apps müssen in der Lage sein, dieses vom Nutzer initiierte Beenden zu verarbeiten.

Verbesserte Verarbeitung von Prefetch-Jobs mit JobScheduler

Mit JobScheduler können Apps bestimmte Jobs als „Prefetch“-Jobs kennzeichnen (mit JobInfo.Builder.setPrefetch()). Das bedeutet, dass sie idealerweise kurz 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 die Möglichkeit zu geben, 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. Apps sollten versuchen, Prefetch-Jobs für alle Aufgaben zu verwenden, die vor dem nächsten App-Start erledigt werden sollen.

Akkunutzung

Android 13 (API-Level 33) bietet die folgenden Möglichkeiten, die Akkulaufzeit des Geräts besser zu verwalten:

Wenn Sie Ihre App mit diesen Änderungen testen, sollten Sie Folgendes prüfen:

  • 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 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 sich im 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 den Status „Eingeschränkt“ 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 Kontingente für Firebase Cloud Messaging (FCM) 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. In 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 eine App erkennt, die ständig 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 Dienste im Vordergrund (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 Antwort auf FCMs mit hoher Priorität postet, 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

Mit Android 13 (API-Level 33) wird eine Berechtigung zum Senden von Benachrichtigungen zur Laufzeit 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, so bald wie möglich Android 13 oder höher als Zielversion festzulegen, um die zusätzliche Kontrolle und Flexibilität 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 Kreditkartendaten in die Zwischenablage kopieren können, müssen Sie den ClipDescription von ClipData ein Flag hinzufügen, bevor Sie ClipboardManager#setPrimaryClip() aufrufen. Wenn Sie dieses Flag hinzufügen, werden sensible Inhalte nicht in der Inhaltsvorschau angezeigt.

Vorschau des kopierten Textes ohne Kennzeichnung sensibler Inhalte
Vorschau des kopierten Textes ohne Kennzeichnung sensibler Inhalte.
Vorschau des kopierten Textes, in der sensible Inhalte gekennzeichnet sind.
Vorschau des kopierten Textes, in der sensible Inhalte gekennzeichnet sind.

Wenn Sie sensible Inhalte kennzeichnen möchten, fügen Sie dem ClipDescription ein boolesches Extra hinzu. Dies 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 Zwischenablage-Benutzeroberfläche finden Sie auf der Seite zur Funktion Kopieren und Einfügen.

Sicherheit

Migration von der gemeinsamen Nutzer-ID

Wenn Ihre App das verworfene 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 deine App nicht mehr auf einer gemeinsamen Nutzer-ID basiert. Wenn deine App android:sharedUserMaxSdkVersion deklariert und neu auf Geräten mit Android 13 oder höher installiert wird, verhält sie sich so, als hättest du android:sharedUserId nie definiert. Aktualisierte Apps verwenden weiterhin die vorhandene gemeinsame Nutzer-ID.

Gemeinsame Nutzer-IDs führen zu nicht deterministischem 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

Schließbare Benachrichtigungen zu Diensten im Vordergrund

Auf Geräten mit Android 13 oder höher können Nutzer Benachrichtigungen im Zusammenhang mit Diensten im Vordergrund standardmäßig schließen.

Hauptfunktion

Legacy-Kopie der Implementierung des Sprachdienstes entfernt

In Android 13 wird die SpeechService-Implementierung aus der Google App entfernt, einschließlich der Spracheingabe, RecognitionService und einer Intent-basierten API.

In Android 12 wurden die folgenden Änderungen vorgenommen:

  • Die SpeechService-Funktionen wurden zur App „Sprachdienste von Google“ migriert, die zum Standard-SpeechService-Anbieter wurde.
  • Die RecognitionService-Funktion wurde in die Android System Intelligence App verschoben, um die On-Device-Spracherkennung zu unterstützen.

Damit die App-Kompatibilität unter Android 12 erhalten bleibt, verwendet die Google App ein Trampolin, um den Traffic an die App „Sprachdienste von Google“ weiterzuleiten. Unter Android 13 wird dieses Trampolin entfernt.

Apps sollten den Standardanbieter des Geräts für SpeechService verwenden, anstatt eine bestimmte App hartzucodieren.