Mit Android 9 (API-Level 28) werden eine Reihe von Änderungen im 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
FOREGROUND_SERVICE
Berechtigung. 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.
Datenschutzänderungen
Wenn deine App auf Android 9 ausgerichtet ist, solltest du Folgendes beibehalten: Verhaltensänderungen zu berücksichtigen. Aktualisierungen der Seriennummer und DNS-Informationen des Geräts den Datenschutz für Nutzer zu verbessern.
Einstellung der Build-Seriennummer
In Android 9 ist Build.SERIAL
immer auf "UNKNOWN"
festgelegt, um die Datenschutz.
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.
Sicherheitsänderungen am Framework
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 deine App auf Android 9 oder höher ausgerichtet ist,
isCleartextTrafficPermitted()
gibt 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, die nach Prozessen getrennt sind
Um die App-Stabilität und Datenintegrität unter Android 9 zu verbessern, dürfen Apps
Einzelne WebView
-Daten freigeben
Verzeichnis unter
mehreren Prozessen. Normalerweise
in solchen Datenverzeichnissen
werden Cookies, HTTP-Caches und andere persistente
temporärer Speicher für das Surfen im Web.
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 WebView
verwenden
in denselben Prozess integrieren. Sie können das „Nur ein Verfahren“ durchsetzen, Regel
durch einen Anruf
disableWebView()
Zoll
die anderen Prozesse Ihrer App. 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. Diese Methode
werden Webdaten aus jedem Prozess in einem eigenen Verzeichnis in den Daten Ihrer Anwendung abgelegt.
-Verzeichnis.
App-spezifische SELinux-Domains
Apps, die auf Android 9 oder höher ausgerichtet sind, können über die weltweit zugänglichen Unix-Berechtigungen. 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 Konnektivitätsdaten 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
getMultipathPreference()
gibt nun einen Wert basierend auf dem zuvor erwähnten Netzwerkverkehr zurück. Beginnend mit
Unter Android 9 gibt die Methode true
für Zellendaten zurück. Wenn jedoch mehr als eine bestimmte Menge
pro Tag erfasst werden, werden false
zurückgegeben. Apps ausgeführt auf
Android 9 muss 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 Wir haben die Unterstützung für den Apache HTTP-Client eingestellt. Ab Android 9 wird diese Bibliothek aus dem bootclasspath an und ist standardmäßig nicht für Anwendungen 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 Apache-Laufzeitbibliothek können Anwendungen ihre
Version der org.apache.http
-Bibliothek im APK verwenden. 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 einem Bereich von 0 (entweder eine Breite oder eine Höhe ist 0) können nicht mehr fokussiert werden.
Außerdem weisen Aktivitäten nicht mehr implizit einen anfänglichen Fokus in Touchmodus aktiviert. Stattdessen können Sie den anfänglichen Fokus explizit anfordern, erwünscht ist.
Verarbeitung von CSS-RGBA-Hexadezimalwerten
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.
Beispielsweise wird die Farbe #80ff8080
derzeit in
WebView als „opaque“
Hellrot (#ff8080
) für Apps, die auf API-Level 27 oder niedriger ausgerichtet sind. Die führende
-Komponente (die von Android als Alpha-Komponente interpretiert würde) ist
wird derzeit ignoriert. Wenn eine App auf API-Level 28 oder höher ausgerichtet ist, ist #80ff8080
als 50% transparentes Hellgrün interpretiert (#80ff80
).
MIME-Typ-Sniffing für Datei: URIs
Unter Android-Versionen vor Android 9 können MIME-Typen aus der Datei abgeleitet werden
Inhalte. 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 erkannte Dateiendung wie .html
hat,
.txt
, .js
oder .css
– der MIME-Typ wird von der Erweiterung festgelegt.
Wenn eine Datei keine oder eine unbekannte Endung hat, ist der MIME-Typ „Einfach“
Text.
Ein URI wie file:///sdcard/test.html
wird beispielsweise so gerendert:
HTML, aber ein URI wie file:///sdcard/test
wird als Nur-Text gerendert.
auch wenn die Datei HTML-Daten enthält.
Scrollelement für das Dokument
Android 9 handhabt den Fall, wenn der Stamm eines Dokuments ist das Scrollelement. In früheren Versionen wurde die Scrollposition des Textelements festgelegt. hatte das Stammelement keine Scroll-Werte. 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. Für Zugriff auf den Darstellungsbereich scrollen
verwenden, verwenden Sie document.scrollingElement
(falls verfügbar).
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.