Wie in früheren Releases umfasst 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 Ihre Anwendung targetSdkVersion
auf 30
setzt, sollten Sie Ihre Anwendung gegebenenfalls anpassen, damit diese Verhaltensweisen korrekt unterstützt werden.
Sieh dir auch die Liste der Verhaltensänderungen an, die alle Apps unter Android 11 betreffen.
Datenschutz
Mit Android 11 werden Änderungen und Einschränkungen eingeführt, um den Datenschutz für Nutzer zu verbessern. Dazu gehören:
- Begrenzter Speicher durchsetzen:Der Zugriff auf externe Speicherverzeichnisse ist auf ein anwendungsspezifisches Verzeichnis und bestimmte von der Anwendung erstellte Medientypen beschränkt.
- Automatisches Zurücksetzen von Berechtigungen:Wenn Nutzer einige Monate lang nicht mit einer App interagiert haben, setzt das System die vertraulichen Berechtigungen der App automatisch zurück.
- Zugriff auf Standortermittlung im Hintergrund:Nutzer müssen zu den Systemeinstellungen weitergeleitet werden, damit sie Apps die Berechtigung zur Standortermittlung im Hintergrund erteilen können.
- 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
Änderungsdetails
Name ändern: NATIVE_HEAP_POINTER_TAGGING
Änderungs-ID: 135754954
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 (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 Wechseln von Änderungen finden Sie unter Plattformverhaltensänderungen in Ihrer App testen und debuggen.
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 Zeiger mit Tags.
Informationen zum Deaktivieren dieser Funktion finden Sie in der Dokumentation zum Manifest allowNativeHeapPointerTagging
.
Änderungen bei Toasts
Benutzerdefinierte Toasts 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 wurden und setView()
nicht aufrufen.
Wenn Ihre App versucht, einen Toast zu posten, der eine benutzerdefinierte Ansicht aus dem Hintergrund enthält, wird die Nachricht dem Nutzer nicht angezeigt. 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-Rückrufe
Wenn du benachrichtigt werden möchtest, wenn ein Toast (Text oder benutzerdefiniert) angezeigt oder verschwindet, verwende die Methode addCallback()
, die in Android 11 hinzugefügt wurde.
Änderungen an der Text Toast API
Apps, die auf Android 11 oder höher ausgerichtet sind, haben bei Text-Toasts folgende Nebenwirkungen:
- 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 auf sie verlassen:
- Die folgenden Methoden sind managementfrei, sollten sie also nicht von Ihrer App verwendet werden:
Konnektivität
Lesezugriff auf APN-Datenbank eingeschränkt
Ä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 Wechseln von Änderungen finden Sie unter Plattformverhaltensänderungen in Ihrer App testen und debuggen.
Apps, die auf Android 11 ausgerichtet sind, benötigen jetzt die privilegierte Manifest.permission.WRITE_APN_SETTINGS
-Berechtigung, um auf die APN-Datenbank des Telefonieanbieters zugreifen zu können. Wenn versucht wird, 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 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
Änderungsdetails
Name ändern: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
Änderungs-ID: 136293963
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 (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 Wechseln von Änderungen finden Sie unter Plattformverhaltensänderungen in Ihrer App testen und debuggen.
Ab Android 11 kann die Bedienungshilfe keine Laufzeitdeklaration mehr erstellen, die eine Verknüpfung mit der Schaltfläche „Bedienungshilfen“ des Systems hat. Wenn Sie AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
an die Eigenschaft flags
eines AccessibilityServiceInfo
-Objekts anhängen, leitet das Framework keine Callback-Ereignisse für Schaltflächen für Bedienungshilfen an Ihren Dienst weiter.
Wenn du Callback-Ereignisse für Bedienungshilfen in deiner Bedienungshilfe empfangen möchtest, verwende die Metadatendatei des Bedienungshilfen-Dienstes, um die Verknüpfung deines Dienstes mit der Schaltfläche „Bedienungshilfen“ zu deklarieren. Schließen Sie den Wert flagRequestAccessibilityButton
in Ihrer Definition des Attributs accessibilityFlags
ein. Ein häufiger Speicherort für die Metadatendatei des Bedienungshilfendienstes ist res/raw/accessibilityservice.xml
.
Kamera
Für Media-Intent-Aktionen ist eine Systemstandardkamera 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 mehr als eine vorinstallierte Kamera-App des Systems verfügbar ist, öffnet das System ein Dialogfeld, in dem der Nutzer eine App auswählen kann. Wenn Ihre App eine bestimmte Kamera-App eines Drittanbieters verwenden soll, um Bilder oder Videos in ihrem Namen 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
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 (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 Wechseln von Änderungen finden Sie unter Plattformverhaltensänderungen in Ihrer 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 die Datei nicht an einer 4-Byte-Grenze liegt. Diese Datei kann vom System nicht dem Arbeitsspeicher zugeordnet werden, wenn eine dieser Bedingungen vorhanden ist. Ressourcentabellen, die nicht dem Arbeitsspeicher zugeordnet werden können, müssen in einen Zwischenspeicher im RAM eingelesen werden. Dies führt zu unnötiger Speicherauslastung auf dem 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 stattdessen alternative Strategien wie das Verkleinern von Anwendungsressourcen oder andere Methoden zum Verkleinern, Verschleiern und Optimieren Ihrer Anwendung.
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 APK Signature Scheme v2 oder höher signiert werden. Auf Geräten mit Android 11 können Nutzer keine Apps installieren oder aktualisieren, die nur mit dem APK-Signaturschema v1 signiert sind.
Wenn du prüfen möchtest, ob deine App mit dem APK-Signaturschema v2 oder höher signiert wird, kannst du 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 der Änderungen an der Paketsichtbarkeit 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>
Callback-Änderungen für OnSharedPreferenceChangeListener
Änderungsdetails
Name ändern: CALLBACK_ON_CLEAR_CHANGE
Änderungs-ID: 119147584
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 (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, erfolgt bei jedem Aufruf von Editor.clear
jetzt 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 zwar derzeit einige Nicht-SDK-Schnittstellen verwenden (je nach Ziel-API-Level Ihrer App), aber die Verwendung von Nicht-SDK-Methoden und -Feldern birgt immer ein hohes Risiko für Probleme mit Ihrer App.
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 benötigt, sollten Sie eine Migration zu SDK-Alternativen planen. Uns ist aber bewusst, dass es bei einigen 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 diesem Android-Release finden Sie unter Updates für Nicht-SDK-Schnittstelleneinschränkungen in Android 11. Weitere Informationen zu Nicht-SDK-Schnittstellen finden Sie unter Einschränkungen für Nicht-SDK-Schnittstellen.