Verhaltensänderungen: alle Apps

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

Unten im Benachrichtigungs-Schieberegler sehen Sie eine Schaltfläche, auf der die Anzahl der Apps angezeigt wird, die derzeit im Hintergrund ausgeführt werden. Wenn Sie diese Schaltfläche drücken, 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 ü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:

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.

Vorschau von kopiertem Text, ohne sensible Inhalte zu kennzeichnen
Vorschau des kopierten Texts ohne Kennzeichnung sensibler Inhalte.
In der Vorschau des kopierten Texts werden sensible Inhalte gekennzeichnet.
In der Vorschau des kopierten Texts werden sensible Inhalte gekennzeichnet.

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ür SpeechService 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.