Die Android 11-Plattform umfasst Verhaltensänderungen, die sich auf deine App auswirken können. Die folgenden Änderungen gelten für alle Apps, wenn sie unter Android 11 ausgeführt werden, unabhängig von targetSdkVersion
. Sie sollten Ihre Anwendung testen und dann bei Bedarf so ändern, dass sie ordnungsgemäß unterstützt wird.
Sieh dir auch die Liste der Änderungen des Verhaltens, die sich nur auf Apps auswirken, die auf Android 11 ausgerichtet sind an.
Datenschutz
In Android 11 wurden Änderungen und Einschränkungen eingeführt, um den Datenschutz für Nutzer zu verbessern. Dazu gehören:
- Einmalige Berechtigungen:Nutzer haben die Möglichkeit, vorübergehenden Zugriff auf Standort-, Mikrofon- und Kameraberechtigungen zu gewähren.
- Sichtbarkeit des Berechtigungsdialogs:Die wiederholte Ablehnung einer Berechtigung impliziert „Nicht mehr fragen“.
- Datenzugriffsprüfung:Sie erhalten Informationen dazu, wo Ihre Anwendung auf private Daten zugreift, sowohl im eigenen Code Ihrer Anwendung als auch im Code abhängiger Bibliotheken.
- Berechtigungen für Systembenachrichtigungsfenster:Bestimmten Klassen von Apps wird auf Anfrage automatisch die Berechtigung
SYSTEM_ALERT_WINDOW
gewährt. Außerdem bringen Intents, die die Intent-AktionACTION_MANAGE_OVERLAY_PERMISSION
enthalten, Nutzer immer zu einem Bildschirm in den Systemeinstellungen. - Dauerhafte SIM-IDs: Unter Android 11 und höher ist der Zugriff auf die nicht rücksetzbaren ICCIDs über die Methode
getIccId()
eingeschränkt. Die Methode gibt einen leeren String ungleich null zurück. Um eine im Gerät eingesetzte SIM-Karte eindeutig zu identifizieren, verwenden Sie stattdessen die MethodegetSubscriptionId()
. Die Abo-ID enthält einen Indexwert (beginnend mit 1) zur eindeutigen Identifizierung installierter SIMs, einschließlich physischer und elektronischer. Der Wert dieser Kennung bleibt für die jeweilige SIM-Karte gleich, es sei denn, das Gerät wird auf die Werkseinstellungen zurückgesetzt.
Weitere Informationen finden Sie auf der Seite Datenschutz.
COVID-19-Benachrichtigungen
Unter Android 11 wird die Plattform mit dem COVID-19-Benachrichtigungssystem aktualisiert. Nutzer können jetzt Apps für COVID-19-Benachrichtigungen unter Android 11 ausführen, ohne die Einstellung für den Gerätestandort aktivieren zu müssen. Dies ist eine Ausnahme für das COVID-19-Benachrichtigungssystem, da es so konstruiert ist, dass Apps, die es verwenden, den Gerätestandort nicht über die Bluetooth-Suche ableiten können.
Aus Datenschutzgründen dürfen alle anderen Apps keine Bluetooth-Suche durchführen, es sei denn, die Einstellung für den Gerätestandort ist aktiviert und der Nutzer hat ihnen die Berechtigung zur Standortermittlung erteilt. Weitere Informationen finden Sie in unserem Update zu COVID-19-Benachrichtigungen.
Sicherheit
SSL-Sockets verwenden standardmäßig die Conscrypt SSL-Engine
Die standardmäßige SSLSocket
-Implementierung von Android basiert auf Conscrypt.
Seit Android 11 baut diese Implementierung intern auf dem SSLEngine
von Conscrypt auf.
Scudo-gehärteter Zuweis
Android 11 verwendet intern den Scudo Hardened Allocator, um Heap-Zuweisungen zu verarbeiten. Scudo ist in der Lage, einige Arten von Verstößen gegen die Speichersicherheit zu erkennen und zu beheben. Wenn Sie in nativen Absturzberichten Abstürze im Zusammenhang mit Sportarten (z. B. Scudo ERROR:
) sehen, lesen Sie die Dokumentation zur Fehlerbehebung bei Sportgeräten.
App-Nutzungsstatistiken
Zum besseren Schutz der Nutzer speichert Android 11 die App-Nutzungsstatistiken jedes Nutzers in einem verschlüsselten Speicher für Anmeldedaten. Daher können weder das System noch die Anwendungen auf diese Daten zugreifen, es sei denn, isUserUnlocked()
gibt true
zurück. Dies geschieht nach einer der folgenden Aktionen:
- Der Nutzer entsperrt sein Gerät zum ersten Mal nach dem 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 für dieses Objekt aufrufen, nachdem der Nutzer sein Gerät entsperrt hat.
Andernfalls gibt die API jetzt Null- oder leere Werte zurück.
Emulator-Unterstützung für 5G
Unter Android 11 werden 5G-APIs hinzugefügt, um deinen Apps die neuesten Funktionen hinzuzufügen. Mit den neuen Funktionen des Android SDK Emulators können Sie die Funktionen beim Hinzufügen testen. Die neue Funktion wurde in der Emulator-Version 30.0.22 hinzugefügt. Wenn Sie die 5G-Netzwerkeinstellung auswählen, wird TelephonyDisplayInfo
auf OVERRIDE_NETWORK_TYPE_NR_NSA
gesetzt und die geschätzte Bandbreite geändert. Außerdem können Sie die Kosten festlegen, um zu prüfen, ob Ihre Anwendung angemessen auf Änderungen des NET_CAPABILITY_TEMPORARILY_NOT_METERED
-Status reagiert.
Leistung und Fehlerbehebung
Fehlerbehebung für JobScheduler API-Aufrufe
Android 11 bietet Debugging-Unterstützung für Apps zur Identifizierung potenzieller JobScheduler
API-Aufrufe, die bestimmte Ratenbegrenzungen überschritten haben.
Entwickler können diese Funktion nutzen, um potenzielle Leistungsprobleme zu identifizieren. Bei Apps, bei denen das Manifestattribut debuggable
auf „true“ gesetzt ist, wird für JobScheduler
API-Aufrufe, die die Ratenbegrenzung überschreiten, RESULT_FAILURE
zurückgegeben.
Die Limits sind so festgelegt, dass legitime Anwendungsfälle nicht betroffen sind.
Dateideskriptor-Sanitizer (fdsan)
Mit Android 10 wurde fdsan
(Dateideskriptor-Sanitizer) eingeführt.
fdsan
erkennt eine unsachgemäße Handhabung der Eigentümerschaft von Dateideskriptoren, z. B. „Use-after-close“ und „Double-close“. Der Standardmodus für fdsan
ändert sich in Android 11. fdsan
wird jetzt bei Erkennung eines Fehlers abgebrochen. Das bisherige Verhalten bestand darin, eine Warnung zu protokollieren und fortzufahren. Wenn in Ihrer Anwendung Abstürze aufgrund von fdsan
auftreten, finden Sie weitere Informationen in der fdsan documentation
.
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.
Gemeinsam genutzte Bibliothek aus Maps Version 1 entfernt
Version 1 der gemeinsam genutzten Bibliothek in Maps wurde in Android 11 vollständig entfernt. Diese Bibliothek wurde zuvor eingestellt und funktioniert für Apps unter Android 10 nicht mehr. Für Apps, die bisher auf Geräten mit Android 9 (API-Level 28) oder niedriger verwendet wurden, sollte stattdessen das Maps SDK for Android verwendet werden.
Interaktion mit anderen Apps
Inhalts-URIs freigeben
Wenn Ihre App einen Inhalts-URI mit einer anderen App teilt, muss der Intent URI-Zugriffsberechtigungen gewähren. Dazu legen Sie mindestens eines der folgenden Intent-Flags fest: FLAG_GRANT_READ_URI_PERMISSION
und FLAG_GRANT_WRITE_URI_PERMISSION
.
So kann sie auch dann auf den Inhalts-URI zugreifen, wenn sie auf Android 11 ausgerichtet ist. Ihre App muss die Intent-Flags auch dann enthalten, wenn der Inhalts-URI mit einem Inhaltsanbieter verknüpft ist, der nicht Ihrer App gehört.
Wenn Ihre App Inhaber des Contentanbieters ist, der mit dem Inhalts-URI verknüpft ist, prüfen Sie, ob der Contentanbieter nicht exportiert wird. Wir empfehlen diese Best Practice für die Sicherheit bereits.
Bibliothek wird geladen
Allgemeine ICU-Bibliothek mit absolutem Pfad wird geladen
Anwendungen, die auf API 28 und niedriger ausgerichtet sind, können dlopen(3)
nicht verwenden, um libicuuc
mit dem absoluten Pfad „/system/lib/libicuuc.so“ zu laden. Für diese Anwendungen gibt dlopen("/system/lib/libicuuc.so", ...)
einen Null-Handle zurück.
Verwenden Sie zum Laden der Bibliothek stattdessen den Namen der Bibliothek als Dateinamen, z. B. dlopen("libicuuc.so", ...)
.