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 Ihre App gegebenenfalls so ändern, dass diese Verhaltensweisen richtig 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
Android 11 führt Änderungen und Einschränkungen ein, um den Datenschutz der Nutzer zu verbessern. Dazu gehören:
- Erzwingung des begrenzten Speichers: 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, werden die sensiblen Berechtigungen der App automatisch zurückgesetzt.
- Standortermittlung im Hintergrund: Nutzer müssen zu den Systemeinstellungen weitergeleitet werden, um Apps die Berechtigung zur Standortermittlung im Hintergrund zu gewähren.
- 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 der Änderung: NATIVE_HEAP_POINTER_TAGGING
Änderungs-ID: 135754954
Umschalten
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_NAMEadb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
Weitere Informationen zum Kompatibilitätsframework und zum Umschalten von Änderungen finden Sie unter Verhaltensänderungen der Plattform in Ihrer App testen und debuggen.
Heap-Pointer haben jetzt ein Tag ungleich null im höchstwertigen Byte (Most Significant Byte, MSB). Anwendungen, die Pointer 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 Getaggte Pointer.
Informationen zum Deaktivieren dieser Funktion finden Sie in der allowNativeHeapPointerTagging
Manifestdokumentation.
Aktualisierungen bei Toasts
Benutzerdefinierte Toasts aus dem 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, aus dem Hintergrund gesendet werden. Text-Toasts
sind weiterhin zulässig. Das sind Toasts, die mit
Toast.makeText() erstellt wurden und bei denen
setView() nicht aufgerufen wird.
Wenn Ihre App trotzdem versucht, einen Toast mit einer benutzerdefinierten Ansicht aus dem Hintergrund zu senden, wird die Nachricht dem Nutzer nicht angezeigt. Stattdessen protokolliert das System die folgende Meldung 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 ausgeblendet wird,
verwenden Sie die
addCallback()
Methode, die in Android 11 hinzugefügt wurde.
API-Änderungen bei Text-Toasts
Bei Apps, die auf Android 11 oder höher ausgerichtet sind, treten bei Text-Toasts die folgenden Nebenwirkungen auf:
- Die
getView()Methode gibtnullzurück. - Die Rückgabewerte der folgenden Methoden spiegeln nicht die tatsächlichen Werte wider. Sie sollten sich daher in Ihrer App nicht darauf verlassen:
- Die folgenden Methoden sind No-Ops und sollten daher nicht in Ihrer App verwendet werden:
Konnektivität
Eingeschränkter Lesezugriff auf die APN-Datenbank
Änderungsdetails
Name der Änderung: APN_READING_PERMISSION_CHANGE_ID
Änderungs-ID: 124107808
Umschalten
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_NAMEadb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
Weitere Informationen zum Kompatibilitätsframework und zum Umschalten von Änderungen finden Sie unter Verhaltensänderungen der Plattform in Ihrer App testen und debuggen.
Für Apps, die auf Android 11 ausgerichtet sind, ist jetzt die
Manifest.permission.WRITE_APN_SETTINGS
privilegierte Berechtigung erforderlich, um die Telephony
Anbieter-APN-Datenbank zu lesen oder darauf zuzugreifen. Wenn Sie ohne diese Berechtigung auf die APN-Datenbank zugreifen, wird eine Sicherheitsausnahme ausgelöst.
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-to-Speech-Engine (TTS) interagieren, ihren Manifestdateien das folgende <queries> Element hinzufügen:
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
Verwendung des Buttons „Bedienungshilfen“ in der Metadatendatei deklarieren
Änderungsdetails
Name der Änderung: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
Änderungs-ID: 136293963
Umschalten
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_NAMEadb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
Weitere Informationen zum Kompatibilitätsframework und zum Umschalten von Änderungen finden Sie unter Verhaltensänderungen der Plattform in Ihrer App testen und debuggen.
Ab Android 11 kann Ihr Bedienungshilfedienst nicht zur Laufzeit deklarieren, dass er mit dem Button „Bedienungshilfen“ des Systems verknüpft ist. Wenn Sie
AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON an die
flags Eigenschaft eines AccessibilityServiceInfo Objekts anhängen, übergibt das Framework keine
Callback-Ereignisse für den Button „Bedienungshilfen“ an Ihren Dienst.
Wenn Sie Callback-Ereignisse für Bedienungshilfen in Ihrem Bedienungshilfedienst empfangen möchten, deklarieren Sie die Verknüpfung Ihres Dienstes mit dem Button „Bedienungshilfen“ in der Metadatendatei des Bedienungshilfedienstes. Fügen Sie den flagRequestAccessibilityButton Wert in
Ihre Definition des
accessibilityFlags
Attributs ein. Ein häufiger Speicherort für die Metadatendatei des Bedienungshilfedienstes ist res/raw/accessibilityservice.xml.
Kamera
Für Media-Intent-Aktionen 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_CAPTUREandroid.media.action.IMAGE_CAPTUREandroid.media.action.IMAGE_CAPTURE_SECURE
Wenn mehrere vorinstallierte Systemkamera-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 in ihrem Namen 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
Änderungsdetails
Name der Änderung: RESOURCES_ARSC_COMPRESSED
Änderungs-ID: 132742131
Umschalten
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_NAMEadb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
Weitere Informationen zum Kompatibilitätsframework und zum Umschalten von Änderungen finden Sie unter Verhaltensänderungen der Plattform 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 wenn diese Datei nicht an einer 4-Byte-Grenze ausgerichtet ist. Unter diesen Bedingungen kann diese Datei vom System nicht in den Arbeitsspeicher gemappt werden. Ressourcentabellen, die nicht in den Arbeitsspeicher gemappt werden können, müssen in einen Puffer im RAM gelesen werden, was zu einer unnötigen Belastung des Systems und einer erheblich höheren RAM-Nutzung auf dem Gerät führt.
Wenn Sie zuvor eine komprimierte resources.arsc Datei verwendet haben, versuchen Sie stattdessen alternative
Strategien, z. B. das Verkleinern von App
Ressourcen oder andere 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.
Sie können entweder Android Studio oder das Tool apksigner in der Befehlszeile verwenden, um zu prüfen, ob Ihre App mit dem APK-Signaturschema v2 oder höher signiert ist.
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 Paket
sichtbarkeit 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 bei Callbacks für OnSharedPreferenceChangeListener
Änderungsdetails
Name der Änderung: CALLBACK_ON_CLEAR_CHANGE
Änderungs-ID: 119147584
Umschalten
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_NAMEadb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
Weitere Informationen zum Kompatibilitätsframework und zum Umschalten von Änderungen finden Sie unter Verhaltensänderungen der Plattform 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 Callback an
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
mit einem null Schlüssel ausgeführt.
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. Wo immer möglich, stellen wir sicher, 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. Sie können derzeit zwar einige Nicht-SDK-Schnittstellen verwenden (je nach Ziel-API-Level Ihrer App), aber die Verwendung einer Nicht-SDK-Methode oder eines Nicht-SDK-Felds birgt immer ein hohes Risiko, dass Ihre App nicht mehr funktioniert.
Wenn Sie nicht sicher sind, ob Ihre App Nicht-SDK-Schnittstellen verwendet, können Sie das testen Ihrer App. 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 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 dieser Version von Android finden Sie unter Aktualisierungen bei 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.