Genau wie in früheren Versionen umfasst auch Android 11 Änderungen am Verhalten, die sich auf deine App auswirken können. Die folgenden Änderungen gelten ausschließlich für Apps, die auf Android 11 oder höher ausgerichtet sind. Wenn Ihre Anwendung targetSdkVersion
auf 30
festlegt, sollten Sie Ihre App gegebenenfalls so anpassen, dass dieses Verhalten ordnungsgemäß unterstützt wird.
Sehen Sie sich auch die Liste der Verhaltensänderungen an, die sich auf alle Apps unter Android 11 auswirken.
Datenschutz
In Android 11 wurden Änderungen und Einschränkungen eingeführt, um den Datenschutz für Nutzer zu verbessern. Dazu gehören:
- Erzwingung des begrenzten Speichers:Der Zugriff auf externe Speicherverzeichnisse ist auf ein app-spezifisches Verzeichnis und bestimmte von der App erstellte Medientypen beschränkt.
- Automatisches Zurücksetzen von Berechtigungen:Wenn Nutzer seit einigen Monaten nicht mit einer App interagiert haben, setzt das System die vertraulichen 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
Heap-Pointer-Tagging
Änderungsdetails
Name ändern: NATIVE_HEAP_POINTER_TAGGING
Änderungs-ID: 135754954
So aktivieren bzw. deaktivieren
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 bzw. Deaktivieren von Änderungen finden Sie unter Änderungen am Plattformverhalten in Ihrer Anwendung testen und debuggen.
Heap-Pointer haben jetzt im höchsten Byte (MSB) ein Tag ungleich null. Anwendungen, die Zeiger nicht korrekt verwenden, einschließlich solchen, 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 Zeiger mit Tags.
Informationen zum Deaktivieren dieses Features finden Sie in der Dokumentation zum allowNativeHeapPointerTagging
-Manifest.
Änderungen bei Toasts
Benutzerdefinierte Toasts aus dem Hintergrund werden blockiert
Aus Sicherheitsgründen und aus Gründen der Nutzerfreundlichkeit blockiert das System Toasts mit benutzerdefinierten Ansichten, wenn diese von einer App, die auf Android 11 oder höher ausgerichtet ist, aus dem Hintergrund gesendet werden. Text-Toasts sind weiterhin zulässig. Das sind Toasts, die mit Toast.makeText()
erstellt wurden und nicht setView()
aufrufen.
Wenn Ihre App versucht, einen Toast mit einer benutzerdefinierten Ansicht vom Hintergrund zu posten, zeigt das System dem Nutzer die Nachricht nicht an. Stattdessen protokolliert das System die folgende Nachricht in logcat:
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 verschwindet, 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, hat das bei Text-Toast folgende Auswirkungen:
- Die Methode
getView()
gibtnull
zurück. - Die Rückgabewerte der folgenden Methoden entsprechen nicht den tatsächlichen Werten. Daher sollten Sie sich in Ihrer App nicht darauf verlassen:
- Die folgenden Methoden sind managementfrei und sollten daher nicht in Ihrer Anwendung verwendet werden:
Konnektivität
Eingeschränkter Lesezugriff auf die APN-Datenbank
Änderungsdetails
Name ändern: APN_READING_PERMISSION_CHANGE_ID
Änderungs-ID: 124107808
So aktivieren bzw. deaktivieren
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 bzw. Deaktivieren von Änderungen finden Sie unter Änderungen am Plattformverhalten in Ihrer Anwendung testen und debuggen.
Apps, die auf Android 11 ausgerichtet sind, benötigen jetzt die Berechtigung Manifest.permission.WRITE_APN_SETTINGS
, um auf die APN-Datenbank des Telefonieanbieters zuzugreifen oder diese zu lesen. Der Versuch, ohne diese Berechtigung auf die APN-Datenbank zuzugreifen, erzeugt eine Sicherheitsausnahme.
Barrierefreiheit
Interaktion mit Text-in-Sprache-Programmen in Manifestdatei deklarieren
Aufgrund von Änderungen an der Paketsichtbarkeit müssen Apps, die auf Android 11 ausgerichtet sind und mit einer Sprachausgabe-Engine interagieren, den Manifestdateien das folgende <queries>
-Element hinzufü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
So aktivieren bzw. deaktivieren
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 bzw. Deaktivieren von Änderungen finden Sie unter Änderungen am Plattformverhalten in Ihrer Anwendung testen und debuggen.
Ab Android 11 kann die Bedienungshilfe keine Laufzeitdeklaration abgeben, um zu bestätigen, dass sie mit der Schaltfläche „Bedienungshilfen“ des Systems verknüpft ist. Wenn Sie AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
an die Eigenschaft flags
eines AccessibilityServiceInfo
-Objekts anhängen, übergibt das Framework keine Callback-Ereignisse für die Schaltfläche „Bedienungshilfen“ an Ihren Dienst.
Um Callback-Ereignisse für Bedienungshilfen in Ihrem Bedienungshilfedienst zu erhalten, geben Sie in der Metadatendatei Ihres Bedienungshilfen-Dienstes die Verknüpfung Ihres Dienstes mit der Schaltfläche „Bedienungshilfen“ an. Nehmen Sie den Wert flagRequestAccessibilityButton
in Ihre Definition des Attributs accessibilityFlags
auf. Ein häufiger Speicherort für die Metadatendatei des Bedienungshilfendienstes ist res/raw/accessibilityservice.xml
.
Kamera
Für Aktionen auf 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 Systemkamera-Apps verfügbar sind, wird dem Nutzer ein Dialogfeld angezeigt, über das er eine App auswählen kann. Wenn Ihre App eine bestimmte Drittanbieter-Kamera-App verwenden soll, um in ihrem Namen Bilder oder Videos aufzunehmen, können Sie diese Intents explizit machen, indem Sie einen Paketnamen oder eine Komponente für den Intent festlegen.
App-Paketerstellung und -Installation
Komprimierte Ressourcendateien
Änderungsdetails
Name ändern: RESOURCES_ARSC_COMPRESSED
Änderungs-ID: 132742131
So aktivieren bzw. deaktivieren
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 bzw. Deaktivieren von Änderungen finden Sie unter Änderungen am Plattformverhalten in Ihrer Anwendung 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 diese Datei nicht an einer 4-Byte-Grenze ausgerichtet ist. Diese Datei kann vom System nicht als Arbeitsspeicher zugeordnet werden, wenn eine dieser Bedingungen erfüllt ist. Ressourcentabellen, die nicht dem Arbeitsspeicher zugeordnet werden können, müssen in einen Puffer im RAM eingelesen werden. Dies führt zu unnötiger Speicherauslastung im System und einer stark erhöhten RAM-Nutzung auf dem Gerät.
Wenn Sie zuvor eine komprimierte resources.arsc
-Datei verwendet haben, können Sie es stattdessen mit alternativen Strategien wie dem Verkleinern von App-Ressourcen oder anderen Methoden zum Verkleinern, Verschleieren und Optimieren Ihrer Anwendung versuchen.
APK-Signaturschema v2 jetzt erforderlich
Apps, die auf Android 11 (API-Level 30) ausgerichtet sind und derzeit nur mit dem APK-Signaturschema v1 signiert werden, müssen jetzt auch mit dem APK-Signaturschema v2 oder höher signiert werden. Nutzer können auf Geräten mit Android 11 keine Apps installieren oder aktualisieren, die nur mit dem APK-Signaturschema v1 signiert sind.
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 apksigner
-Tool 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, den Manifestdateien das folgende <queries>
-Element hinzufügen:
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
Callback-Änderungen für OnSharedPreferencesChangeListener
Änderungsdetails
Name ändern: CALLBACK_ON_CLEAR_CHANGE
Änderungs-ID: 119147584
So aktivieren bzw. deaktivieren
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 Aktivieren bzw. Deaktivieren von Änderungen finden Sie unter Änderungen am Plattformverhalten in Ihrer Anwendung testen und debuggen.
Bei Apps, die auf Android 11 (API-Level 30) ausgerichtet sind, erfolgt jetzt bei jedem Aufruf von Editor.clear
ein Callback an OnSharedPreferenceChangeListener.onSharedPreferenceChanged
mit einem null
-Schlüssel.
Einschränkungen für Nicht-SDK-Schnittstellen
Android 11 enthält aktualisierte Listen eingeschränkter Nicht-SDK-Schnittstellen, die auf der Zusammenarbeit mit Android-Entwicklern und den neuesten internen Tests basieren. Wann immer möglich, achten wir darauf, dass öffentliche Alternativen verfügbar sind, bevor wir Nicht-SDK-Schnittstellen einschränken.
Wenn deine App nicht auf Android 11 ausgerichtet ist, betreffen dich einige dieser Änderungen möglicherweise nicht sofort. Sie können derzeit zwar einige Nicht-SDK-Schnittstellen verwenden (abhängig vom Ziel-API-Level Ihrer App), aber die Verwendung von Nicht-SDK-Methoden oder -Feldern birgt immer ein hohes Risiko für Probleme mit Ihrer App.
Wenn Sie sich nicht sicher sind, ob Ihre Anwendung Nicht-SDK-Schnittstellen verwendet, können Sie die Anwendung testen. Wenn Ihre App Nicht-SDK-Schnittstellen verwendet, sollten Sie mit der Planung einer Migration zu SDK-Alternativen beginnen. Trotzdem können einige Apps für die Verwendung von Nicht-SDK-Schnittstellen infrage kommen. Wenn Sie für eine Funktion 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 diesem Android-Release finden Sie unter Aktualisierungen der Einschränkungen für Nicht-SDK-Schnittstellen in Android 11. Weitere Informationen zu Nicht-SDK-Schnittstellen im Allgemeinen finden Sie unter Einschränkungen für Nicht-SDK-Schnittstellen.