Verhaltensänderungen: alle Apps

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-Aktion ACTION_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 Methode getSubscriptionId(). 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", ...).