Die Android 11-Plattform umfasst Verhaltensänderungen, die sich auf Ihre App auswirken können. Die folgenden Verhaltensänderungen gelten für alle Apps, die auf Android 11 ausgeführt werden, unabhängig von targetSdkVersion
. Sie sollten Ihre App testen und sie gegebenenfalls so anpassen, dass sie diese Funktionen unterstützt.
Lesen Sie sich auch die Liste der Verhaltensänderungen durch, die sich nur auf Apps auswirken, die auf Android 11 ausgerichtet sind.
Datenschutz
In Android 11 werden Änderungen und Einschränkungen eingeführt, um den Datenschutz für Nutzer zu verbessern. Dazu gehören:
- Einmalige Berechtigungen:Nutzer können Apps vorübergehend Zugriff auf die Berechtigungen für Standort, Mikrofon und Kamera gewähren.
- Sichtbarkeit des Berechtigungsdialogfelds:Wiederholte Ablehnungen einer Berechtigung bedeuten „Nicht mehr fragen“.
- Audits für den Datenzugriff:Sie erhalten Informationen dazu, wo Ihre App auf personenbezogene Daten zugreift, sowohl im Code Ihrer App als auch im Code abhängiger Bibliotheken.
- Berechtigungen für das Fenster für Systemwarnungen:Bestimmten App-Klassen wird die Berechtigung
SYSTEM_ALERT_WINDOW
auf Anfrage automatisch gewährt. Außerdem werden Nutzer bei Intents, die die Intent-AktionACTION_MANAGE_OVERLAY_PERMISSION
enthalten, immer zu einem Bildschirm in den Systemeinstellungen weitergeleitet. - Permanente SIM-IDs:Unter Android 11 und höher ist der Zugriff auf die nicht zurücksetzbaren ICCIDs über die Methode
getIccId()
eingeschränkt. Die Methode gibt einen nicht-null-basierten, leeren String zurück. Wenn Sie eine installierte SIM-Karte auf dem Gerät eindeutig identifizieren möchten, verwenden Sie stattdessen die MethodegetSubscriptionId()
. Die Abo-ID ist ein Indexwert (beginnend mit 1), mit dem installierte SIM-Karten eindeutig identifiziert werden können, einschließlich physischer und elektronischer. Der Wert dieser Kennung bleibt für eine bestimmte SIM-Karte unverändert, es sei denn, das Gerät wird auf die Werkseinstellungen zurückgesetzt.
Weitere Informationen finden Sie auf der Seite Datenschutz.
COVID-19-Benachrichtigungen
Mit Android 11 wird die Plattform im Hinblick auf das COVID-19-Benachrichtigungssystem aktualisiert. Nutzer können jetzt Apps für COVID-19-Benachrichtigungen unter Android 11 verwenden, ohne die Einstellung für die Gerätestandortermittlung aktivieren zu müssen. Diese Ausnahme gilt nur für das COVID-19-Benachrichtigungssystem, da es so konzipiert ist, dass Apps, die es verwenden, den Gerätestandort nicht über die Bluetooth-Suche ermitteln können.
Aus Datenschutzgründen ist es allen anderen Apps weiterhin untersagt, Bluetooth-Scans durchzuführen, es sei denn, die Gerätestandorteinstellung ist aktiviert und der Nutzer hat der App die Standortberechtigung erteilt. Weitere Informationen finden Sie in unserem Blogpost Aktuelle Informationen zu COVID-19-Benachrichtigungen.
Sicherheit
SSL-Sockets verwenden standardmäßig die Conscrypt-SSL-Engine
Die Standard-SSLSocket
-Implementierung von Android basiert auf Conscrypt.
Seit Android 11 basiert diese Implementierung intern auf der SSLEngine
von Conscrypt.
Scudo Hardened Allocator
In Android 11 wird der Scudo Hardened Allocator intern für die Verwaltung von Heap-Zuweisungen verwendet. Scudo kann einige Arten von Verstößen gegen die Speichersicherheit erkennen und beheben. Wenn in nativen Absturzberichten Scudo-bezogene Abstürze (z. B. Scudo ERROR:
) angezeigt werden, lesen Sie die Dokumentation zur Fehlerbehebung für Scudo.
Statistiken zur App-Nutzung
Um die Nutzer besser zu schützen, werden in Android 11 die App-Nutzungsstatistiken jedes Nutzers in einem verschlüsselten Speicher für Anmeldedaten gespeichert. Daher können weder das System noch Apps auf diese Daten zugreifen, es sei denn, isUserUnlocked()
gibt true
zurück. Das ist der Fall, wenn eines der folgenden Ereignisse eintritt:
- Der Nutzer entsperrt sein Gerät zum ersten Mal nach einem Systemstart.
- Der Nutzer wechselt auf dem Gerät zu seinem Konto.
Wenn Ihre App bereits an eine Instanz von UsageStatsManager
gebunden ist, prüfen Sie, ob Sie Methoden auf diesem Objekt aufrufen, nachdem der Nutzer sein Gerät entsperrt hat.
Andernfalls gibt die API jetzt null oder leere Werte zurück.
Emulatorunterstützung für 5G
Android 11 bietet 5G APIs, mit denen Sie Ihren Apps innovative Funktionen hinzufügen können. Sie können die Funktionen nach dem Hinzufügen mit den neuen Funktionen des Android SDK-Emulators testen. Die neue Funktion wurde in Emulator-Version 30.0.22 hinzugefügt. Wenn Sie die 5G-Netzwerkeinstellung auswählen, wird TelephonyDisplayInfo
auf OVERRIDE_NETWORK_TYPE_NR_NSA
gesetzt, die geschätzte Bandbreite wird geändert und Sie können die Begrenzung festlegen, um zu prüfen, ob Ihre App angemessen auf Änderungen des Status von NET_CAPABILITY_TEMPORARILY_NOT_METERED
reagiert.
Leistung und Fehlerbehebung
Begrenzungen für JobScheduler API-Aufrufe debuggen
Android 11 bietet eine Debug-Unterstützung für Apps, mit der potenzielle JobScheduler
API-Aufrufe identifiziert werden können, die bestimmte Ratenlimits überschritten haben.
Entwickler können diese Funktion verwenden, um potenzielle Leistungsprobleme zu erkennen. Bei Apps, für die das Manifestattribut debuggable
auf „wahr“ gesetzt ist, wird bei JobScheduler
API-Aufrufen, die die Grenzwerte überschreiten, RESULT_FAILURE
zurückgegeben.
Die Limits sind so festgelegt, dass legitime Anwendungsfälle nicht beeinträchtigt werden sollten.
Dateideskriptor-Sanitizer (fdsan)
Mit Android 10 wurde fdsan
(Dateideskriptor-Sanitizer) eingeführt.
fdsan
erkennt einen Missbrauch der Eigentümerschaft von Dateideskriptoren, z. B. die Verwendung nach dem Schließen und das doppelte Schließen. Der Standardmodus für fdsan
ändert sich in Android 11. fdsan
wird jetzt beim Erkennen eines Fehlers abgebrochen. Bisher wurde eine Warnung protokolliert und fortgefahren. Wenn in Ihrer Anwendung aufgrund von fdsan
Abstürze auftreten, lesen Sie den Hilfeartikel fdsan documentation
.
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 jedoch 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 Sie nicht sicher sind, ob Ihre App Nicht-SDK-Schnittstellen verwendet, können Sie Ihre App testen, um das 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 keine Alternative zur Verwendung einer Nicht-SDK-Benutzeroberfläche für eine Funktion in Ihrer App 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.
Gemeinsam genutzte Bibliothek von Google Maps v1 entfernt
Version 1 der geteilten Google Maps-Mediathek wurde in Android 11 vollständig entfernt. Diese Bibliothek wurde bereits eingestellt und funktioniert für Apps unter Android 10 nicht mehr. Für Apps, die bisher auf dieser freigegebenen Bibliothek für Geräte mit Android 9 (API-Level 28) oder niedriger basierten, sollte stattdessen das Maps SDK for Android verwendet werden.
Interaktion mit anderen Apps
Inhalts-URIs teilen
Wenn Ihre App einen Inhalts-URI mit einer anderen App teilt, muss der Intent URI-Zugriffsberechtigungen gewähren. Legen Sie dazu mindestens eine der folgenden Intent-Flags fest:
FLAG_GRANT_READ_URI_PERMISSION
und FLAG_GRANT_WRITE_URI_PERMISSION
.
So kann die andere App, wenn sie auf Android 11 ausgerichtet ist, weiterhin auf die Inhalts-URI zugreifen. Ihre App muss die Intent-Flags auch dann enthalten, wenn der Inhalts-URI mit einem Contentanbieter verknüpft ist, der nicht zu Ihrer App gehört.
Wenn Ihre App der Inhaber des Inhaltsanbieters ist, der mit dem Inhalts-URI verknüpft ist, prüfen Sie, ob der Inhaltsanbieter nicht exportiert wird. Wir empfehlen diese Sicherheitsbest Practice bereits.
Mediathek wird geladen
ICU-Gängige Bibliothek mit absolutem Pfad laden
Bei Apps, die auf API 28 oder niedriger ausgerichtet sind, kann dlopen(3)
nicht verwendet werden, um libicuuc
mit dem absoluten Pfad „/system/lib/libicuuc.so“ zu laden. Für diese Apps gibt dlopen("/system/lib/libicuuc.so", ...)
einen Null-Handle zurück.
Verwenden Sie stattdessen den Bibliotheksnamen als Dateinamen, z. B. dlopen("libicuuc.so", ...)
.