Verhaltensänderungen: alle Apps

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

Unten auf der Benachrichtigungsleiste befindet sich eine Schaltfläche mit der Anzahl der Apps, die derzeit im Hintergrund ausgeführt werden. Wenn Sie auf diese Schaltfläche klicken, wird ein Dialogfeld mit den Namen verschiedener Apps angezeigt. Die Stopp-Schaltfläche befindet sich rechts neben jeder App.
Abbildung 1: Workflow für den Task-Manager, mit dem Nutzer Apps beenden können, für die laufende Dienste im Vordergrund ausgeführt werden. 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 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:

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.

Textvorschau kopiert, ohne sensible Inhalte zu kennzeichnen
Textvorschau kopiert, ohne sensible Inhalte zu kennzeichnen.
Textvorschau mit Meldung sensibler Inhalte kopiert.
Kopierte Textvorschau, in der sensible Inhalte gemeldet wurden.

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äßigen SpeechService-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.