Änderungen beim Verhalten: Apps, die auf Android 11 ausgerichtet sind

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:

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:

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.