Die Android 11-Plattform umfasst Verhaltensänderungen, die sich auf Ihre App auswirken können. Die folgenden Verhaltensänderungen gelten für alle Apps, wenn sie unter Android 11 ausgeführt werden, unabhängig von targetSdkVersion
. Sie sollten Ihre App testen und sie bei Bedarf anpassen, um diese richtig zu unterstützen.
Sehen Sie sich auch die Liste der Verhaltensänderungen an, die sich nur auf Apps auswirken, die auf Android 11 ausgerichtet sind.
Datenschutz
In Android 11 wurden Änderungen und Einschränkungen eingeführt, um den Datenschutz der Nutzer zu verbessern. Dazu gehören die folgenden:
- Einmalige Berechtigungen:Nutzer haben die Möglichkeit, einen temporären Zugriff auf Berechtigungen für Standort, Mikrofon und Kamera zu gewähren.
- Sichtbarkeit des Berechtigungsdialogfelds:Wenn eine Berechtigung wiederholt abgelehnt wird, wird davon ausgegangen, dass der Nutzer nicht noch einmal gefragt werden möchte.
- Audit für den Datenzugriff:Sie erhalten Informationen darüber, wo Ihre App auf private Daten zugreift, sowohl im Code Ihrer App als auch im Code abhängiger Bibliotheken.
- Berechtigungen für Systembenachrichtigungsfenster:Bestimmten App-Klassen wird die Berechtigung
SYSTEM_ALERT_WINDOW
automatisch auf Anfrage 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:Auf Geräten mit 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 leeren String zurück. Verwenden Sie stattdessen die MethodegetSubscriptionId()
, um eine installierte SIM-Karte auf dem Gerät eindeutig zu identifizieren. Die Abo-ID ist ein Indexwert (beginnend mit 1) zur eindeutigen Identifizierung installierter SIMs, sowohl physischer als auch elektronischer. Der Wert dieser Kennung ist für eine bestimmte SIM stabil, sofern das Gerät nicht auf die Werkseinstellungen zurückgesetzt wird.
Weitere Informationen finden Sie auf der Seite Datenschutz.
COVID-19-Benachrichtigungen
Mit Android 11 wird die Plattform mit Blick auf das COVID-19-Benachrichtigungssystem aktualisiert. Nutzer können jetzt Apps für COVID-19-Benachrichtigungen unter Android 11 ausführen, ohne die Standorteinstellung des Geräts aktivieren zu müssen. Dies ist eine Ausnahme nur für das COVID-19-Benachrichtigungssystem, da es so konzipiert wurde, dass Apps, die es verwenden, den Gerätestandort nicht durch Bluetooth-Scans ermitteln können.
Zum Schutz der Nutzerdaten ist es allen anderen Apps weiterhin untersagt, Bluetooth-Scans durchzuführen, es sei denn, die Einstellung für den Gerätestandort ist aktiviert und der Nutzer hat ihnen die Standortberechtigung erteilt. Weitere Informationen finden Sie in unserem Beitrag Update zu COVID-19-Benachrichtigungen.
Sicherheit
SSL-Sockets verwenden standardmäßig die Conscrypt-SSL-Engine
Die Standardimplementierung von SSLSocket
in Android basiert auf Conscrypt.
Seit Android 11 basiert diese Implementierung intern auf SSLEngine
von Conscrypt.
Scudo Hardened Allocator
In Android 11 wird der Scudo Hardened Allocator intern für die Verarbeitung von Heap-Zuweisungen verwendet. Scudo kann bestimmte Arten von Arbeitssichheitsverletzungen erkennen und beheben. Wenn in nativen Absturzberichten Scudo-bezogene Abstürze (z. B. Scudo ERROR:
) angezeigt werden, lesen Sie die Dokumentation zur Fehlerbehebung bei Scudo.
App-Nutzungsstatistiken
Um Nutzer besser zu schützen, speichert Android 11 die App-Nutzungsstatistiken jedes Nutzers in einem anmeldedatenverschlüsselten Speicher. 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 eine der folgenden Aktionen ausgeführt wird:
- 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 für dieses 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
In Android 11 wurden 5G-APIs eingeführt, mit denen Sie Ihren Apps innovative Funktionen hinzufügen können. Um die Funktionen beim Hinzufügen zu testen, können Sie die neuen Funktionen des Android SDK-Emulators verwenden. 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 Abrechnungsmethode festlegen, um zu prüfen, ob Ihre App angemessen auf Änderungen des Status von NET_CAPABILITY_TEMPORARILY_NOT_METERED
reagiert.
Leistung und Fehlerbehebung
Debugging von JobScheduler API-Aufruflimits
Android 11 bietet Unterstützung beim Debuggen von Apps, um potenzielle JobScheduler
-API-Aufrufe zu identifizieren, die bestimmte Ratenbegrenzungen überschritten haben.
Entwickler können damit potenzielle Leistungsprobleme erkennen. Bei Apps, für die das Manifestattribut debuggable
auf „true“ gesetzt ist, wird bei JobScheduler
-API-Aufrufen, die die Ratenbeschränkungen überschreiten, RESULT_FAILURE
zurückgegeben.
Die Limits sind so festgelegt, dass legitime Anwendungsfälle nicht beeinträchtigt werden.
File Descriptor Sanitizer (fdsan)
Mit Android 10 wurde fdsan
(File Descriptor Sanitizer) eingeführt.
fdsan
erkennt Fehler bei der Verarbeitung 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. Bisher wurde eine Warnung protokolliert und fortgefahren. Wenn Ihre Anwendung aufgrund von fdsan
abstürzt, lesen Sie die 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. 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 (abhängig vom Ziel-API-Level Ihrer App). Die Verwendung einer Nicht-SDK-Methode oder eines Nicht-SDK-Felds birgt jedoch immer ein hohes Risiko, dass Ihre App nicht mehr funktioniert.
Wenn Sie sich nicht sicher sind, ob Ihre App Nicht-SDK-Schnittstellen verwendet, können Sie Ihre App testen, um das herauszufinden. Wenn Ihre App auf Nicht-SDK-Schnittstellen basiert, sollten Sie mit der Planung einer Migration zu SDK-Alternativen beginnen. Wir verstehen jedoch, dass einige Apps gültige Anwendungsfälle für die Verwendung von Nicht-SDK-Schnittstellen haben. Wenn Sie keine Alternative zur Verwendung einer Nicht-SDK-Schnittstelle für eine Funktion in Ihrer App finden, sollten Sie eine neue öffentliche API anfordern.
Weitere Informationen zu den Änderungen in dieser Version von Android finden Sie unter Updates to non-SDK interface restrictions in Android 11. Weitere Informationen zu Nicht-SDK-Schnittstellen finden Sie unter Einschränkungen für Nicht-SDK-Schnittstellen.
Freigegebene Mediathek für Maps v1 wurde entfernt
Die Version 1 der gemeinsam genutzten Google Maps-Fotogalerie wurde in Android 11 vollständig entfernt. Diese Bibliothek wurde zuvor eingestellt und funktioniert für Apps unter Android 10 nicht mehr. Apps, die bisher auf diese freigegebene Bibliothek für Geräte mit Android 9 (API-Level 28) oder niedriger angewiesen waren, sollten stattdessen das Maps SDK for Android verwenden.
Interaktion mit anderen Apps
Inhalts-URIs teilen
Wenn Ihre App einen Content-URI mit einer anderen App teilt, muss der Intent URI-Zugriffsberechtigungen gewähren, indem mindestens eines der folgenden Intent-Flags festgelegt wird:
FLAG_GRANT_READ_URI_PERMISSION
und
FLAG_GRANT_WRITE_URI_PERMISSION
.
Wenn die andere App auf Android 11 ausgerichtet ist, kann sie weiterhin auf den Content-URI zugreifen. Ihre App muss die Intent-Flags auch dann enthalten, wenn der Inhalts-URI mit einem Inhaltsanbieter verknüpft ist, der nicht zu Ihrer App gehört.
Wenn Ihre App den mit dem Inhalts-URI verknüpften Contentanbieter besitzt, prüfen Sie, ob der Contentanbieter nicht exportiert wird. Wir empfehlen diese Sicherheits-Best Practice bereits.
Mediathek wird geladen
ICU-Bibliothek mit absolutem Pfad laden
Apps, die auf API 28 oder niedriger ausgerichtet sind, können dlopen(3)
nicht verwenden, um libicuuc
mit dem absoluten Pfad „/system/lib/libicuuc.so“ zu laden. Für diese Apps gibt dlopen("/system/lib/libicuuc.so", ...)
ein Null-Handle zurück.
Verwenden Sie stattdessen den Bibliotheksnamen als Dateinamen, z. B. dlopen("libicuuc.so", ...)
.