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 Anwendung testen und dann bei Bedarf anpassen, damit diese korrekt unterstützt werden.

Sieh dir auch die Liste der Verhaltensänderungen an, die nur Apps betreffen, die auf Android 13 ausgerichtet sind.

Leistung und Akku

Task-Manager

Unten in der Benachrichtigungsleiste befindet sich eine Schaltfläche, die die Anzahl der Apps anzeigt, die derzeit im Hintergrund ausgeführt werden. Wenn Sie auf diese Schaltfläche klicken, wird ein Dialogfeld mit den Namen der verschiedenen Anwendungen angezeigt. Die Schaltfläche „Stopp“ befindet sich rechts neben der jeweiligen App.
Abbildung 1. Workflow für den Task-Manager, mit dem Nutzer Apps beenden können, für die 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 über die Benachrichtigungsleiste einen Workflow abschließen, um Apps zu beenden, für die Dienste im Vordergrund ausgeführt werden (siehe Abbildung 1). Diese Option wird als Task-Manager bezeichnet. Apps müssen in der Lage sein, dieses vom Nutzer initiierte Beenden zu verarbeiten.

Verarbeitung von Prefetch-Jobs mit JobScheduler verbessern

JobScheduler bietet Anwendungen die Möglichkeit, bestimmte Jobs als "Prefetch"-Jobs zu kennzeichnen (mithilfe von JobInfo.Builder.setPrefetch()). Das bedeutet, dass sie idealerweise in der Nähe und vor der nächsten Anwendungseinführung ausgeführt werden sollten, um die Nutzerfreundlichkeit zu verbessern. In der Vergangenheit hat JobScheduler nur das Signal verwendet, um Prefetch-Jobs opportunistisch kostenlose oder überschüssige Daten zu ermöglichen.

Ab Android 13 (API-Level 33) versucht das System zu ermitteln, wann eine App das nächste Mal gestartet wird, und verwendet diese Schätzung, um Prefetch-Jobs auszuführen. Anwendungen sollten versuchen, Prefetch-Jobs für alle Aufgaben zu verwenden, die vor dem nächsten Anwendungsstart erledigt werden sollen.

Akkuressourcennutzung

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

Prüfen Sie Folgendes, wenn Sie Ihre Anwendung mit diesen Änderungen testen:

  • 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 die Anwendung diesem Bucket zuzuweisen:

    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
    • Es werden keine Wecker 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 Message) mit hoher Priorität

Unter Android 13 (API-Level 33) werden die FCM-Kontingente (Firebase Cloud Messaging) 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. 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 skalieren proportional zur Anzahl der Benachrichtigungen, die dem Nutzer als Reaktion auf FCMs 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 du Dienste im Vordergrund als Reaktion auf einen FCM startest, solltest du das Ergebnis von RemoteMessage.getPriority() prüfen und bestätigen, dass es PRIORITY_HIGH ist und/oder mögliche ForegroundServiceStartNotAllowedException-Ausnahmen verarbeitet.

Wenn Ihre Anwendung nicht immer Benachrichtigungen als Reaktion auf FCMs mit hoher Priorität veröffentlicht, 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. Durch diese Änderung können sich Nutzer auf die Benachrichtigungen konzentrieren, die für sie am wichtigsten sind.

Wir empfehlen dringend, die Ausrichtung so bald wie möglich auf Android 13 oder höher vorzunehmen, um von den zusätzlichen Steuerungsmöglichkeiten und der Flexibilität dieser Funktion profitieren zu können.

Weitere Informationen zu Best Practices für App-Berechtigungen

Sensible Inhalte in Zwischenablage ausblenden

Wenn Nutzer in deiner App vertrauliche Inhalte wie Passwörter oder Kreditkartendaten in die Zwischenablage kopieren können, musst du dem ClipDescription von ClipData ein Flag hinzufügen, bevor du ClipboardManager#setPrimaryClip() aufrufst. Durch das Hinzufügen dieses Flags wird verhindert, dass sensible Inhalte in der Inhaltsvorschau angezeigt werden.

Vorschau von kopiertem Text, ohne sensible Inhalte zu kennzeichnen
Vorschau des kopierten Textes, ohne sensible Inhalte zu kennzeichnen.
Vorschau von kopiertem Text, in der sensible Inhalte gemeldet werden.
Vorschau des kopierten Textes, der sensible Inhalte meldet.

Fügen Sie dem ClipDescription ein boolesches Extra hinzu, um sensible Inhalte zu kennzeichnen. Dies sollte für alle Anwendungen 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 Feature-Seite Kopieren und Einfügen.

Sicherheit

Von freigegebener Nutzer-ID migrieren

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

Freigegebene Nutzer-IDs verursachen ein nicht deterministisches 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

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

Legacy-Version des Sprachdienstes entfernt

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

In Android 12 wurden die folgenden Änderungen vorgenommen:

  • SpeechService-Funktionen wurden zur Sprachdienste-App von Google migriert, die zum Standardanbieter SpeechService wurde.
  • Die RecognitionService-Funktion wurde in die Android System Intelligence App verschoben, um die Spracherkennung auf dem Gerät zu unterstützen.

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

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