Verhaltensänderungen: Apps, die auf API-Level 28 oder höher ausgerichtet sind

Mit Android 9 (API-Level 28) werden einige Änderungen am Android-System eingeführt. Die folgenden Verhaltensänderungen gelten ausschließlich für Apps mit Ausrichtung auf API-Level 28 oder höher. Apps, bei denen targetSdkVersion auf API-Level 28 oder höhere muss modifizieren Apps so, dass diese Verhaltensweisen ordnungsgemäß unterstützt werden, sofern dies für die App erforderlich ist.

Bei Änderungen, die alle unter Android 9 ausgeführten Apps betreffen, unabhängig von der jeweiligen API Zielebene fest, sehen Sie Verhaltensänderungen: alle Apps

Dienste im Vordergrund

Apps, die auf Android 9 oder höher ausgerichtet sind und Dienste im Vordergrund verwenden, müssen die Berechtigung FOREGROUND_SERVICE anfordern. Das ist eine normale Berechtigung, sodass sie vom System automatisch der anfragenden App zugewiesen wird.

Wenn eine App für Android 9 oder höher versucht, einen Dienst im Vordergrund zu erstellen, fordert FOREGROUND_SERVICE an, vom System eine SecurityException aus.

Änderungen beim Datenschutz

Wenn deine App auf Android 9 ausgerichtet ist, solltest du Folgendes beibehalten: Verhaltensänderungen zu berücksichtigen. Diese Aktualisierungen der Geräteseriennummer und der DNS-Informationen tragen zum Schutz der Privatsphäre der Nutzer bei.

Einstellung der Build-Seriennummer

Unter Android 9 ist Build.SERIAL immer auf "UNKNOWN" festgelegt, um die Privatsphäre der Nutzer zu schützen.

Wenn Ihre App auf die Hardware-Seriennummer eines Geräts zugreifen muss, sollten Sie fordern Sie stattdessen READ_PHONE_STATE und dann auf getSerial()

DNS-Datenschutz

Apps, die auf Android 9 ausgerichtet sind, sollten die APIs des privaten DNS berücksichtigen. Insbesondere Apps sollten sicherstellen, dass bei DNS-over-TLS alle der integrierte DNS-Client entweder verschlüsseltes DNS verwendet und denselben Hostnamen wie der oder zugunsten des System-Resolvers deaktiviert ist.

Änderungen an der Framework-Sicherheit

Unter Android 9 gibt es einige Änderungen am Verhalten, die Sicherheit der App zu erhöhen. Diese Änderungen werden jedoch nur wirksam, wenn deine App auf das API-Level ausgerichtet ist. 28 oder höher.

Netzwerk-TLS standardmäßig aktiviert

Wenn Ihre App auf Android 9 oder höher ausgerichtet ist, gibt die Methode isCleartextTrafficPermitted() standardmäßig false zurück. Wenn Ihre App Klartext für bestimmten Domains, müssen Sie cleartextTrafficPermitted explizit auf true setzen für diese Domains im Bereich Netzwerksicherheit Ihrer Anwendung Konfiguration.

Webbasierte Datenverzeichnisse, getrennt nach Prozess

Um die App-Stabilität und Datenintegrität in Android 9 zu verbessern, können Apps kein einziges WebView-Datenverzeichnis für mehrere Prozesse freigeben. In der Regel werden in solchen Datenverzeichnissen Cookies, HTTP-Caches und andere persistente und temporäre Speicher im Zusammenhang mit dem Surfen im Web gespeichert.

In den meisten Fällen sollte Ihre App Klassen aus der android.webkit-Paket, z. B. als WebView und CookieManager, in nur einem . Beispielsweise sollten Sie alle Activity-Objekte, die ein WebView verwenden, in denselben Prozess verschieben. Sie können die Regel „Nur ein Prozess“ strenger erzwingen, indem Sie disableWebView() in den anderen Prozessen Ihrer App aufrufen. Dieser Aufruf verhindert, dass WebView initialisiert wird versehentlich in diese anderen Prozesse ein, selbst wenn sie von einem abhängigen Bibliothek.

Wenn Ihre App Instanzen von WebView in mehreren Prozessen, müssen Sie jedem Prozess mithilfe der Methode WebView.setDataDirectorySuffix() bevor eine bestimmte Instanz von WebView in diesem Prozess verwendet wird. Bei dieser Methode werden Webdaten aus jedem Prozess in einem eigenen Verzeichnis im Datenverzeichnis Ihrer App abgelegt.

SELinux-Domains pro App

Apps, die auf Android 9 oder höher ausgerichtet sind, können keine Daten mit anderen Apps teilen, die Unix-Berechtigungen verwenden, die für alle zugänglich sind. Durch diese Änderung wird die Integrität der Android Application Sandbox insbesondere die Anforderung, dass die private Daten zugänglich sind nur von dieser App.

Wenn Sie Dateien für andere Apps freigeben möchten, verwenden Sie Inhalte Dienstanbieter.

Änderungen bei der Verbindung

Zählung von Verbindungsdaten und Multipath

Bei Apps, die auf Android 9 oder höher ausgerichtet sind, zählt das System Netzwerktraffic in Netzwerken die nicht der aktuellen Standardeinstellung entsprechen, z. B. Mobilfunkdatenverkehr, während das Gerät eingeschaltet ist. und bietet Methoden in den NetworkStatsManager um diesen Traffic abzufragen.

Insbesondere gibt getMultipathPreference() jetzt einen Wert basierend auf dem oben genannten Netzwerkverkehr zurück. Ab Android 9 gibt die Methode true für Mobilfunkdaten zurück. Wenn jedoch an einem Tag mehr als eine bestimmte Menge an Traffic anfällt, wird false zurückgegeben. Apps, die unter Android 9 ausgeführt werden, müssen die Methode aufrufen und diesen Hinweis berücksichtigen.

Die ConnectivityManager.NetworkCallback sendet jetzt Informationen über VPNs an Apps. Durch diese Änderung wird es viel einfacher, damit Apps Verbindungsereignisse überwachen können, ohne synchrone und asynchrone Aufrufe und die Verwendung eingeschränkter APIs. Außerdem bedeutet das, dass Die Informationsübertragung funktioniert wie erwartet, wenn ein Gerät mit mehreren WLANs oder mehrere Mobilfunknetze gleichzeitig

Einstellung des Apache HTTP-Clients

Mit Android 6.0 haben wir die Unterstützung für den Apache-HTTP-Client entfernt. Ab Android 9 wird diese Bibliothek aus der Boot-Classpath entfernt und ist standardmäßig nicht für Apps verfügbar.

Apps, die auf Android 9 und höher ausgerichtet sind, kann ihrem AndroidManifest.xml Folgendes hinzufügen:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

Als Alternative zur Verwendung der Apache-Laufzeitbibliothek können Apps ihre eigene Version der org.apache.http-Bibliothek in ihrem APK bündeln. In diesem Fall müssen Sie die Bibliothek neu verpacken (mit einem Dienstprogramm wie Jar Jar), um Kompatibilitätsprobleme mit Klassen zu vermeiden. mit den in der Laufzeit bereitgestellten Klassen.

Änderungen an der Benutzeroberfläche

Fokus ansehen

Ansichten mit einer Fläche von 0 (entweder eine Breite oder eine Höhe von 0) können nicht mehr fokussiert werden.

Außerdem wird im Touchmodus nicht mehr implizit der anfängliche Fokus auf Aktivitäten gelegt. Stattdessen können Sie den anfänglichen Fokus explizit anfordern, erwünscht ist.

Umgang mit CSS-RGBA-Hexwerten

Für Apps, die auf Android 9 oder höher ausgerichtet sind, muss der Entwurf aktiviert werden CSS-Farbmodul – Level 4 für die Verarbeitung von CSS-Farben mit 4 und 8 Hexadezimalziffern.

CSS-Farbmodul – Level 4 wird seit Version 52 von Chrome unterstützt, WebView deaktiviert die Funktion derzeit. da bestehende Android-Apps 32-Bit-Hexadezimalfarben enthalten. in der Android-Reihenfolge (ARGB), was zu Renderingfehlern führen würde.

Die Farbe #80ff8080 wird beispielsweise derzeit in WebView als opakes Hellrot (#ff8080) für Apps gerendert, die auf API-Ebene 27 oder niedriger ausgerichtet sind. Die erste Komponente (die von Android als Alpha-Komponente interpretiert wird) wird derzeit ignoriert. Wenn eine App auf API-Level 28 oder höher ausgerichtet ist, wird #80ff8080 als 50 % transparentes Hellgrün (#80ff80) interpretiert.

MIME-Typ-Sniffing für Datei: URIs

Bei Android-Versionen vor Android 9 konnten MIME-Typen aus dem Dateiinhalt abgeleitet werden. Ab Android 9 (API-Level 28) müssen Apps das richtige Dateiendung beim Laden von file: URIs in einer WebView

Die Verwendung des Dateiinhalts zur Ableitung von MIME-Typen kann eine Quelle für Sicherheitslücken sein. und ist von modernen Browsern nicht erlaubt.

Wenn eine Datei eine bekannte Dateiendung wie .html, .txt, .js oder .css hat, wird der MIME-Typ anhand der Erweiterung ermittelt. Wenn eine Datei keine oder eine nicht erkannte Erweiterung hat, ist der MIME-Typ „Nur-Text“.

Ein URI wie file:///sdcard/test.html wird beispielsweise als HTML gerendert, ein URI wie file:///sdcard/test jedoch als Nur-Text, auch wenn die Datei HTML-Daten enthält.

Scrollelement für das Dokument

Unter Android 9 wird der Fall korrekt behandelt, in dem das Wurzelelement eines Dokuments das Scrollelement ist. In früheren Versionen wurde die Scrollposition auf dem Body-Element festgelegt und das Stammelement hatte keine Scrollwerte. Android 9 ermöglicht die standardkonformes Verhalten, bei dem das Scrollelement die Stammebene ist -Elements.

Außerdem kann ein direkter Zugriff auf document.body.scrollTop, document.body.scrollLeft, document.documentElement.scrollTop oder document.documentElement.scrollLeft anders als je nach Ziel-SDK. Wenn verfügbar, verwenden Sie document.scrollingElement, um auf die Scrollwerte des Darstellungsbereichs zuzugreifen.

Benachrichtigungen von gesperrten Apps

Vor Android 9 wurden Benachrichtigungen von gesperrten Apps abgebrochen. Ab Android 9 werden Benachrichtigungen von gesperrten Apps erst wieder angezeigt, wird die App fortgesetzt.