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.