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

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.