Verhaltensänderungen: Apps, die auf Android 11 ausgerichtet sind

Wie frühere Versionen enthält auch Android 11 Verhaltensänderungen, die sich auf deine App auswirken können. Die folgenden Verhaltensänderungen gelten ausschließlich für Apps, die auf Android 11 oder höher ausgerichtet sind. Wenn in Ihrer App targetSdkVersion auf 30 festgelegt ist, sollten Sie sie so ändern, dass diese Verhaltensweisen gegebenenfalls unterstützt werden.

Sehen Sie sich auch die Liste der Verhaltensänderungen an, die sich auf alle Apps auswirken, die unter Android 11 ausgeführt werden.

Datenschutz

In Android 11 werden Änderungen und Einschränkungen eingeführt, um den Datenschutz für Nutzer zu verbessern. Dazu gehören:

Weitere Informationen finden Sie auf der Seite Datenschutz.

Sicherheit

Heap-Pointer-Tagging

Änderungsdetails

Name ändern: NATIVE_HEAP_POINTER_TAGGING

Änderungs-ID: 135754954

Umschalten

Wenn du die Kompatibilität deiner App mit Android 11 testest, kannst du diese Änderung mit den folgenden ADB-Befehlen aktivieren oder deaktivieren:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

Weitere Informationen zum Kompatibilitäts-Framework und zum Aktivieren/Deaktivieren von Änderungen findest du unter Änderungen am Plattformverhalten in deiner App testen und debuggen.

Heap-Zeiger haben jetzt ein Tag ungleich null im höchstwertigen Byte (MSB). Anwendungen, die Zeiger falsch verwenden, einschließlich solcher, die das MSB ändern, können jetzt abstürzen oder andere Probleme verursachen. Diese Änderung ist erforderlich, um zukünftige Hardware mit aktivierter ARM Memory Tagging Extension (MTE) zu unterstützen. Weitere Informationen finden Sie unter Tagged Pointers.

Informationen zum Deaktivieren dieser Funktion finden Sie in der allowNativeHeapPointerTagging-Manifestdokumentation.

Aktualisierungen bei Toasts

Benutzerdefinierte Toasts im Hintergrund werden blockiert

Aus Sicherheitsgründen und um eine gute Nutzererfahrung zu gewährleisten, blockiert das System Toasts, die benutzerdefinierte Ansichten enthalten, wenn diese Toasts von einer App, die auf Android 11 oder höher ausgerichtet ist, im Hintergrund gesendet werden. Text-Toasts sind weiterhin zulässig. Dies sind Toasts, die mit Toast.makeText() erstellt werden und nicht setView() aufrufen.

Wenn Ihre App trotzdem versucht, einen Toast mit einer benutzerdefinierten Ansicht im Hintergrund zu posten, wird die Nachricht dem Nutzer nicht angezeigt. Stattdessen wird die folgende Meldung in logcat protokolliert:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

Toast-Callbacks

Wenn Sie benachrichtigt werden möchten, wenn ein Toast (Text oder benutzerdefiniert) angezeigt oder ausgeblendet wird, verwenden Sie die Methode addCallback(), die in Android 11 hinzugefügt wurde.

Änderungen an der Text-Toast-API

Bei Apps, die auf Android 11 oder höher ausgerichtet sind, treten die folgenden Nebenwirkungen für Text-Toasts auf:

Verbindung

Eingeschränkter Lesezugriff auf die APN-Datenbank

Änderungsdetails

Name ändern: APN_READING_PERMISSION_CHANGE_ID

Änderungs-ID: 124107808

Umschalten

Wenn du die Kompatibilität deiner App mit Android 11 testest, kannst du diese Änderung mit den folgenden ADB-Befehlen aktivieren oder deaktivieren:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

Weitere Informationen zum Kompatibilitäts-Framework und zum Aktivieren/Deaktivieren von Änderungen findest du unter Änderungen am Plattformverhalten in deiner App testen und debuggen.

Apps, die auf Android 11 ausgerichtet sind, benötigen jetzt die privilegierte Berechtigung Manifest.permission.WRITE_APN_SETTINGS, um die APN-Datenbank des Telephony-Anbieters zu lesen oder darauf zuzugreifen. Wenn Sie versuchen, ohne diese Berechtigung auf die APN-Datenbank zuzugreifen, wird eine Sicherheitsausnahme generiert.

Bedienungshilfen

Interaktion mit TTS-Engines in der Manifestdatei deklarieren

Aufgrund von Änderungen an der Paketsichtbarkeit müssen Apps, die auf Android 11 ausgerichtet sind und mit einer Text-zu-Sprache-Engine interagieren, das folgende <queries>-Element in ihre Manifestdateien einfügen:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Verwendung der Schaltfläche „Bedienungshilfen“ in der Metadatendatei deklarieren

Änderungsdetails

Name ändern: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

Änderungs-ID: 136293963

Umschalten

Wenn du die Kompatibilität deiner App mit Android 11 testest, kannst du diese Änderung mit den folgenden ADB-Befehlen aktivieren oder deaktivieren:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

Weitere Informationen zum Kompatibilitäts-Framework und zum Aktivieren/Deaktivieren von Änderungen findest du unter Änderungen am Plattformverhalten in deiner App testen und debuggen.

Ab Android 11 kann Ihr Bedienungshilfe-Dienst keine Laufzeitdeklaration mehr erstellen, dass er mit der Schaltfläche „Bedienungshilfen“ des Systems verknüpft ist. Wenn du AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON an das Attribut flags eines AccessibilityServiceInfo-Objekts anhängst, übergibt das Framework keine Callback-Ereignisse für die Schaltfläche „Bedienungshilfen“ an deinen Dienst.

Wenn Sie in Ihrem Bedienungshilfe-Dienst Callback-Ereignisse für Bedienungshilfen erhalten möchten, müssen Sie in der Metadatendatei des Bedienungshilfe-Dienstes die Verknüpfung des Dienstes mit der Schaltfläche „Bedienungshilfen“ deklarieren. Fügen Sie den Wert flagRequestAccessibilityButton in die Definition des Attributs accessibilityFlags ein. Ein gängiger Speicherort für die Metadatendatei des Bedienungshilfendienstes ist res/raw/accessibilityservice.xml.

Kamera

Für Medien-Intent-Aktionen ist die Standardkamera des Systems erforderlich

Ab Android 11 können nur vorinstallierte Systemkamera-Apps auf die folgenden Intent-Aktionen reagieren:

Wenn mehr als eine vorinstallierte Systemkamera-App verfügbar ist, wird ein Dialogfeld angezeigt, in dem der Nutzer eine App auswählen kann. Wenn deine App eine bestimmte Kamera-App eines Drittanbieters verwenden soll, um Bilder oder Videos aufzunehmen, kannst du diese Intents explizit angeben, indem du einen Paketnamen oder eine Komponente für den Intent festlegst.

Erstellung von App-Paketen und Installation

Komprimierte Ressourcendateien

Änderungsdetails

Name ändern: RESOURCES_ARSC_COMPRESSED

Änderungs-ID: 132742131

Umschalten

Wenn du die Kompatibilität deiner App mit Android 11 testest, kannst du diese Änderung mit den folgenden ADB-Befehlen aktivieren oder deaktivieren:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

Weitere Informationen zum Kompatibilitäts-Framework und zum Aktivieren/Deaktivieren von Änderungen findest du unter Änderungen am Plattformverhalten in deiner App testen und debuggen.

Apps, die auf Android 11 (API-Level 30) oder höher ausgerichtet sind, können nicht installiert werden, wenn sie eine komprimierte resources.arsc-Datei enthalten oder wenn diese Datei nicht an einer 4-Byte-Grenze ausgerichtet ist. Diese Datei kann vom System nicht im Speicher abgebildet werden, wenn eine dieser Bedingungen erfüllt ist. Ressourcentabellen, die nicht im Arbeitsspeicher abgebildet werden können, müssen in einen Puffer im RAM eingelesen werden. Dies führt zu unnötigem Arbeitsspeichermangel im System und zu einer stark erhöhten RAM-Nutzung auf dem Gerät.

Wenn Sie zuvor eine komprimierte resources.arsc-Datei verwendet haben, versuchen Sie es stattdessen mit alternativen Strategien, z. B. mit dem Verkleinern von App-Ressourcen oder anderen Methoden zum Verkleinern, Verschleiern und Optimieren Ihrer App.

APK-Signaturschema v2 jetzt erforderlich

Apps, die auf Android 11 (API-Level 30) ausgerichtet sind und derzeit nur mit dem APK-Signaturschema v1 signiert sind, müssen jetzt auch mit dem APK-Signaturschema v2 oder höher signiert werden. Nutzer können Apps, die nur mit dem APK-Signaturschema v1 signiert sind, nicht auf Geräten mit Android 11 installieren oder aktualisieren.

Wenn Sie prüfen möchten, ob Ihre App mit dem APK-Signaturschema v2 oder höher signiert ist, können Sie entweder Android Studio oder das Tool apksigner in der Befehlszeile verwenden.

Firebase

Firebase JobDispatcher und GCMNetworkManager

Wenn Ihre App auf API-Level 30 oder höher ausgerichtet ist, sind Firebase JobDispatcher- und GcmNetworkManager API-Aufrufe auf Geräten mit Android 6.0 (API-Level 23) oder höher deaktiviert. Informationen zur Migration finden Sie unter Von Firebase JobDispatcher zu WorkManager migrieren und Von GCMNetworkManager zu WorkManager migrieren.

Spracherkennung

Aufgrund von Änderungen an der Paketsichtbarkeit müssen Apps, die auf Android 11 ausgerichtet sind und mit einem Spracherkennungsdienst interagieren, das folgende <queries>-Element zu ihren Manifestdateien hinzufügen:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

Callback-Änderungen für OnSharedPreferenceChangeListener

Änderungsdetails

Name ändern: CALLBACK_ON_CLEAR_CHANGE

Änderungs-ID: 119147584

Umschalten

Wenn du die Kompatibilität deiner App mit Android 11 testest, kannst du diese Änderung mit den folgenden ADB-Befehlen aktivieren oder deaktivieren:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

Weitere Informationen zum Kompatibilitäts-Framework und zum Aktivieren/Deaktivieren von Änderungen findest du unter Änderungen am Plattformverhalten in deiner App testen und debuggen.

Bei Apps, die auf Android 11 (API-Level 30) ausgerichtet sind, wird bei jedem Aufruf von Editor.clear ein Callback an OnSharedPreferenceChangeListener.onSharedPreferenceChanged mit einem null-Schlüssel ausgeführt.

Einschränkungen für Nicht-SDK-Schnittstellen

Android 11 enthält aktualisierte Listen mit eingeschränkten Nicht-SDK-Schnittstellen, die auf der Zusammenarbeit mit Android-Entwicklern und den neuesten internen Tests basieren. Wir stellen nach Möglichkeit öffentliche Alternativen zur Verfügung, bevor wir Nicht-SDK-Schnittstellen einschränken.

Wenn deine App nicht auf Android 11 ausgerichtet ist, wirken sich einige dieser Änderungen möglicherweise nicht sofort auf dich aus. Derzeit können Sie zwar einige Nicht-SDK-Schnittstellen verwenden (abhängig vom Ziel-API-Level Ihrer App), die Verwendung von Nicht-SDK-Methoden oder ‑Feldern birgt jedoch immer ein hohes Risiko, dass Ihre App nicht mehr funktioniert.

Wenn Sie sich nicht sicher sind, ob Ihre App Nicht-SDK-Schnittstellen verwendet, können Sie Ihre App testen, um dies herauszufinden. Wenn Ihre App auf Nicht-SDK-Schnittstellen basiert, sollten Sie mit der Planung einer Migration zu SDK-Alternativen beginnen. Wir wissen jedoch, dass es für einige Apps gültige Anwendungsfälle für die Verwendung von Nicht-SDK-Schnittstellen gibt. Wenn Sie keine Alternative zur Verwendung einer Nicht-SDK-Schnittstelle für eine Funktion in Ihrer App finden, sollten Sie eine neue öffentliche API anfordern.

Weitere Informationen zu den Änderungen in dieser Android-Version findest du unter Aktualisierungen der Einschränkungen für Nicht-SDK-Schnittstellen in Android 11. Weitere Informationen zu Nicht-SDK-Schnittstellen finden Sie unter Einschränkungen für Nicht-SDK-Schnittstellen.