Wie bei früheren Releases enthält Android 11 Verhaltensänderungen, die sich auf Ihre App auswirken können. Die folgenden Verhaltensänderungen gelten ausschließlich für Apps, die auf Android 11 oder höher ausgerichtet sind. Wenn Ihre App targetSdkVersion
auf 30
festlegt, sollten Sie sie gegebenenfalls so ändern, dass diese Verhaltensweisen ordnungsgemäß unterstützt werden.
Lesen Sie sich auch die Liste der Verhaltensänderungen durch, die sich auf alle Apps auswirken, die unter Android 11 ausgeführt werden.
Datenschutz
Mit Android 11 werden Änderungen und Einschränkungen eingeführt, um den Datenschutz für Nutzer zu verbessern. Dazu gehören:
- Durchsetzung des Speicherbereichs:Der Zugriff auf externe Speicherverzeichnisse ist auf ein app-spezifisches Verzeichnis und bestimmte Medientypen beschränkt, die von der App erstellt wurden.
- Automatisches Zurücksetzen von Berechtigungen:Wenn Nutzer einige Monate lang nicht mit einer App interagiert haben, setzt das System die sensiblen Berechtigungen der App automatisch zurück.
- Zugriff auf die Standortermittlung im Hintergrund:Nutzer müssen zu den Systemeinstellungen weitergeleitet werden, um Apps die Berechtigung zur Standortermittlung im Hintergrund zu erteilen.
- Paketsichtbarkeit:Wenn eine App die Liste der auf dem Gerät installierten Apps abfragt, wird die zurückgegebene Liste gefiltert.
Weitere Informationen finden Sie auf der Seite Datenschutz.
Sicherheit
Tagging von Heap-Zeigern
Details ändern
Name ändern: NATIVE_HEAP_POINTER_TAGGING
Änderungs-ID: 135754954
So schalten Sie die Funktion ein und aus
Wenn Sie die Kompatibilität Ihrer App mit Android 11 testen, können Sie 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 und Deaktivieren von Änderungen finden Sie unter Änderungen am Plattformverhalten in Ihrer App testen und beheben.
Heap-Pointer haben jetzt ein Tag ungleich Null im höchstwertigen Byte (MSB). Anwendungen, die Pointer falsch verwenden, einschließlich Anwendungen, die den 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 Getaggte Zeiger.
Informationen zum Deaktivieren dieser Funktion finden Sie in der Manifestdokumentation für allowNativeHeapPointerTagging
.
Änderungen bei Toasts
Benutzerdefinierte Benachrichtigungen im Pop-up-Fenster aus dem Hintergrund werden blockiert
Aus Sicherheitsgründen und zur Gewährleistung einer positiven Nutzererfahrung blockiert das System Toasts mit benutzerdefinierten Ansichten, wenn diese Toasts von einer App für Android 11 oder höher aus dem Hintergrund gesendet werden. Text-Toasts sind weiterhin zulässig. Das sind Toasts, die mit Toast.makeText()
erstellt werden und setView()
nicht aufrufen.
Wenn Ihre App trotzdem versucht, im Hintergrund ein Toast mit einer benutzerdefinierten Ansicht zu posten, wird die Nachricht dem Nutzer nicht angezeigt. Stattdessen wird in logcat die folgende Meldung 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 bei Text-Toasts die folgenden Nebenwirkungen auf:
- Die Methode
getView()
gibtnull
zurück. - Die Rückgabewerte der folgenden Methoden spiegeln nicht die tatsächlichen Werte wider. Sie sollten sie daher nicht in Ihrer App verwenden:
- Die folgenden Methoden haben keine Auswirkungen und sollten daher nicht in Ihrer App verwendet werden:
Konnektivität
Eingeschränkter Lesezugriff auf die APN-Datenbank
Änderungsdetails
Name ändern: APN_READING_PERMISSION_CHANGE_ID
Änderungs-ID: 124107808
Wechseln
Wenn Sie die Kompatibilität Ihrer App mit Android 11 testen, können Sie 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 und Deaktivieren von Änderungen finden Sie unter Änderungen am Plattformverhalten in Ihrer App testen und beheben.
Apps, die auf Android 11 ausgerichtet sind, benötigen jetzt die Berechtigung Manifest.permission.WRITE_APN_SETTINGS
, um die APN-Datenbank des Telefonieanbieters lesen oder darauf zugreifen zu können. Wenn Sie ohne diese Berechtigung auf die APN-Datenbank zugreifen, 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 Sprachausgabe-Engine interagieren, das folgende <queries>
-Element zu ihren Manifestdateien hinzufügen:
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
Verwendung der Schaltfläche „Bedienungshilfen“ in der Metadatendatei deklarieren
Details ändern
Name ändern: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
Änderungs-ID: 136293963
So schalten Sie die Funktion ein und aus
Wenn Sie die Kompatibilität Ihrer App mit Android 11 testen, können Sie 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 und Deaktivieren von Änderungen finden Sie unter Änderungen am Plattformverhalten in Ihrer App testen und beheben.
Ab Android 11 kann Ihr Bedienungshilfendienst nicht mehr in der Laufzeit deklarieren, dass er mit der Bedienungshilfenschaltfläche des Systems verknüpft ist. Wenn Sie der Eigenschaft flags
eines AccessibilityServiceInfo
-Objekts AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
anhängen, werden vom Framework keine Rückrufereignisse für die Schaltfläche für Barrierefreiheit an Ihren Dienst übergeben.
Wenn Sie Rückrufe für Bedienungshilfen in Ihrem Bedienungshilfendienst erhalten möchten, müssen Sie in der Metadatendatei des Bedienungshilfendienstes die Verknüpfung Ihres Dienstes mit der Schaltfläche „Bedienungshilfen“ deklarieren. Geben Sie den Wert flagRequestAccessibilityButton
in die Definition des Attributs accessibilityFlags
ein. Ein häufiger Speicherort für die Metadatendatei des Bedienungshilfendienstes ist res/raw/accessibilityservice.xml
.
Kamera
Für Aktionen mit Medienabsicht ist die Standardkamera des Systems erforderlich
Ab Android 11 können nur vorinstallierte Systemkamera-Apps auf die folgenden Intent-Aktionen reagieren:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
Wenn mehrere vorinstallierte Kamera-Apps verfügbar sind, wird dem Nutzer ein Dialogfeld angezeigt, in dem er eine App auswählen kann. Wenn Ihre App eine bestimmte Kamera-App eines Drittanbieters verwenden soll, um Bilder oder Videos im Namen der App aufzunehmen, können Sie diese Intents explizit machen, indem Sie einen Paketnamen oder eine Komponente für den Intent festlegen.
App-Paketierung und -Installation
Komprimierte Ressourcendateien
Details ändern
Name ändern: RESOURCES_ARSC_COMPRESSED
Änderungs-ID: 132742131
So schalten Sie die Funktion ein und aus
Wenn Sie die Kompatibilität Ihrer App mit Android 11 testen, können Sie 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 und Deaktivieren von Änderungen finden Sie unter Änderungen am Plattformverhalten in Ihrer App testen und beheben.
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 diese Datei nicht auf eine 4-Byte-Grenze ausgerichtet ist. Diese Datei kann vom System nicht dem Arbeitsspeicher zugeordnet werden, wenn eine dieser Bedingungen vorhanden ist. Ressourcentabellen, die nicht speicherabgebildet werden können, müssen in einen Puffer im RAM gelesen werden. Dies führt zu unnötigem Arbeitsspeicherdruck auf dem System und zu einer deutlich erhöhten RAM-Nutzung auf dem Gerät.
Wenn Sie zuvor eine komprimierte resources.arsc
-Datei verwendet haben, sollten Sie stattdessen alternative Strategien ausprobieren, z. B. das Schrumpfen von App-Ressourcen oder andere Methoden zum Schrumpfen, Verschleieren 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 Version 1 signiert sind, müssen jetzt auch mit dem APK-Signaturschema Version 2 oder höher signiert sein. Nutzer können auf Geräten mit Android 11 keine Apps installieren oder aktualisieren, die nur mit dem APK-Signaturschema Version 1 signiert sind.
Sie können entweder Android Studio oder das apksigner
-Tool in der Befehlszeile verwenden, um zu prüfen, ob Ihre App mit dem APK-Signaturschema 2 oder höher signiert ist.
Firebase
Firebase JobDispatcher und GCMNetworkManager
Wenn Ihre App auf API-Level 30 oder höher ausgerichtet ist, werden FirebaseJobDispatcher- 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 Sichtbarkeit von Paketen müssen Apps, die auf Android 11 ausgerichtet sind und mit einem Spracherkennungsdienst interagieren, ihren Manifestdateien das folgende <queries>
-Element hinzufügen:
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
Änderungen am Rückruf für OnSharedPreferenceChangeListener
Änderungsdetails
Name ändern: CALLBACK_ON_CLEAR_CHANGE
Änderungs-ID: 119147584
So schalten Sie die Funktion ein und aus
Wenn Sie die Kompatibilität Ihrer App mit Android 11 testen, können Sie 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 Wechseln von Änderungen finden Sie unter Plattformverhaltensänderungen in Ihrer App testen und debuggen.
Bei Apps, die auf Android 11 (API-Level 30) ausgerichtet sind, wird jetzt bei jedem Aufruf von Editor.clear
ein Rückruf an OnSharedPreferenceChangeListener.onSharedPreferenceChanged
mit einem null
-Schlüssel gesendet.
Einschränkungen für Nicht-SDK-Schnittstellen
Android 11 enthält aktualisierte Listen eingeschränkter nicht SDK-basierter Schnittstellen, die auf der Zusammenarbeit mit Android-Entwicklern und den neuesten internen Tests basieren. Wir sorgen nach Möglichkeit dafür, dass öffentliche Alternativen verfügbar sind, bevor wir Nicht-SDK-Schnittstellen einschränken.
Wenn Ihre App nicht auf Android 11 ausgerichtet ist, wirken sich einige dieser Änderungen möglicherweise nicht sofort auf Sie aus. Derzeit können Sie einige Nicht-SDK-Schnittstellen verwenden (je nach 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 du nicht sicher bist, ob deine App Nicht-SDK-Schnittstellen verwendet, kannst du die App testen, um es herauszufinden. Wenn Ihre App Nicht-SDK-Schnittstellen verwendet, sollten Sie mit der Planung einer Migration zu SDK-Alternativen beginnen. Uns ist jedoch bewusst, dass es für einige Apps gültige Anwendungsfälle für die Verwendung von Nicht-SDK-Schnittstellen gibt. Wenn Sie für ein Feature in Ihrer App keine Alternative zur Verwendung einer Nicht-SDK-Schnittstelle finden, sollten Sie eine neue öffentliche API anfordern.
Weitere Informationen zu den Änderungen in dieser Android-Version finden Sie unter Änderungen an den Einschränkungen für nicht SDK-spezifische Oberflächen in Android 11. Weitere Informationen zu Nicht-SDK-Schnittstellen finden Sie unter Einschränkungen für Nicht-SDK-Schnittstellen.