Android 9 (niveau d'API 28) introduit un certain nombre de modifications dans le système Android.
Les modifications de comportement suivantes ne s'appliquent qu'aux applications qui ciblent
Niveau d'API 28 ou supérieur. Applications qui définissent targetSdkVersion
sur le niveau d'API 28 ou
plus élevé doit modifier
leurs applications afin de prendre en charge ces comportements correctement, le cas échéant.
Pour les modifications qui affectent toutes les applications exécutées sous Android 9, quelle que soit l'API niveau ciblé, voir Changements de comportement: toutes les applications.
Services de premier plan
Les applications qui ciblent Android 9 ou version ultérieure et utilisent des services de premier plan doivent demander
le FOREGROUND_SERVICE
l'autorisation. Il s'agit d'une autorisation normale,
afin que le système l'accorde
automatiquement à l'application à l'origine de la demande.
Si une appli qui cible Android 9 ou une version ultérieure tente de créer un service de premier plan sans
demandant FOREGROUND_SERVICE
,
le système génère une erreur SecurityException
.
Modifications concernant la confidentialité
Si votre application cible Android 9, vous devez conserver les éléments suivants les changements de comportement à l’esprit. Ces mises à jour des informations DNS et série sur l'appareil pour améliorer la confidentialité des utilisateurs.
Abandon du numéro de série du build
Sous Android 9, Build.SERIAL
correspond à
toujours défini sur "UNKNOWN"
pour protéger les données confidentialité.
Si votre application a besoin d'accéder au numéro de série matériel d'un appareil, vous devez
demandez plutôt
READ_PHONE_STATE
l'autorisation, puis appelez
getSerial()
Confidentialité DNS
Les applications ciblant Android 9 doivent respecter les API DNS privées. En particulier, les applications doivent s'assurer que, si le résolveur du système utilise DNS-over-TLS, le client DNS intégré utilise soit un DNS chiffré vers le même nom d'hôte que le ou est désactivé au profit du résolveur système.
Modifications de la sécurité du framework
Android 9 inclut plusieurs modifications de comportement qui améliorent la sécurité de votre application, mais ces modifications ne prennent effet que si votre application cible un niveau d'API. 28 ou version ultérieure.
TLS réseau activé par défaut
Si votre application cible Android 9 ou une version ultérieure, le
isCleartextTrafficPermitted()
renvoie false
par défaut. Si votre application doit activer le texte clair pour
domaines spécifiques, vous devez définir explicitement cleartextTrafficPermitted
sur true
pour ces domaines, dans la section Sécurité du réseau
Configuration.
Répertoires de données Web séparés par processus
Pour améliorer la stabilité des applications et l'intégrité des données sous Android 9, les applications ne peuvent pas
partager des données WebView
uniques
répertoire parmi
plusieurs processus. Généralement,
ces répertoires de données stockent des cookies,
des caches HTTP ainsi que d'autres
stockage temporaire lié à
la navigation sur le Web.
Dans la plupart des cas, votre application doit utiliser des classes issues de
Package android.webkit
, tel que
en tant que WebView
et
CookieManager
, en un seul
processus. Par exemple, vous devez tout déplacer
Objets Activity
qui utilisent un WebView
dans le même processus. Vous pouvez appliquer le principe d'une "seule procédure" de façon plus stricte règle
en appelant
disableWebView()
po
les autres processus
de votre application. Cet appel empêche l'initialisation de WebView
.
dans ces autres processus, même s'il est appelé par erreur
bibliothèque.
Si votre application doit utiliser des instances
WebView
dans plusieurs processus,
vous devez attribuer un suffixe de répertoire de données unique à chaque processus, à l'aide de la méthode
WebView.setDataDirectorySuffix()
, avant d'utiliser une instance donnée de WebView
dans ce processus. Cette méthode
place les données Web de chaque processus dans son propre répertoire, au sein des données de votre application
.
Domaines SELinux par application
Les applications qui ciblent Android 9 ou version ultérieure ne peuvent pas partager de données avec d'autres applications utilisant d’autorisations Unix accessibles à travers le monde. Cette modification améliore l'intégrité Bac à sable d'application Android en particulier l'exigence que l'utilisateur vos données privées sont accessibles uniquement par cette application.
Pour partager des fichiers avec d'autres applications, utilisez un contenu d'un fournisseur de services.
Modifications de la connectivité
Comptage des données de connectivité et multi-chemins
Dans les applications qui ciblent Android 9 ou version ultérieure, le système comptabilise
le trafic réseau sur les réseaux
qui ne sont pas définies par défaut, comme le trafic cellulaire lorsque l'appareil est allumé
Wi-Fi, et fournit des méthodes dans le
NetworkStatsManager
pour interroger ce trafic.
En particulier,
getMultipathPreference()
renvoie désormais une valeur basée sur le trafic réseau mentionné ci-dessus. En commençant par
Android 9, la méthode renvoie true
pour les données cellulaires, mais lorsque leur nombre dépasse un certain seuil
que le trafic s'accumule en une journée, il commence à renvoyer false
. Applications exécutées sur
Android 9 doit appeler la méthode et respecter cette indication.
ConnectivityManager.NetworkCallback
envoie désormais des informations sur les VPN aux applications. Avec ce changement, il est beaucoup plus facile
pour que les applications écoutent les événements de connectivité sans avoir à combiner des
les appels asynchrones et l'utilisation d'API limitées. De plus, cela signifie que
le transfert d'informations fonctionne comme prévu lorsqu'un appareil est connecté à plusieurs
de réseaux Wi-Fi ou de plusieurs
réseaux mobiles simultanément.
Abandon du client HTTP Apache
Avec Android 6.0, nous avons supprimé la compatibilité avec le client HTTP Apache. À partir d'Android 9, cette bibliothèque est supprimée du bootclasspath et n'est pas disponible pour les applications par défaut.
Pour continuer à utiliser le client HTTP Apache, les applications qui ciblent Android 9 ou une version ultérieure
peuvent ajouter les éléments suivants à leur AndroidManifest.xml
:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Au lieu d'utiliser la bibliothèque Apache d'exécution, les applications peuvent regrouper leurs
propre version de la bibliothèque org.apache.http
dans son APK. Dans ce cas,
vous devez réempaqueter la bibliothèque (avec un utilitaire comme
Jar Jar) pour éviter les problèmes de compatibilité de classe
avec les classes fournies dans l'environnement d'exécution.
Modifications apportées à l'interface utilisateur
Afficher le focus
Les vues avec une surface nulle (soit une largeur, soit une hauteur de 0) ne sont plus sélectionnables.
De plus, les activités n'attribuent plus implicitement le focus initial mode tactile. À la place, c'est à vous de demander explicitement la priorité initiale, si comme vous le souhaitez.
Gestion des valeurs hexadécimales RVBA CSS
Les applications qui ciblent Android 9 ou version ultérieure doivent activer le brouillon Module de couleur CSS niveau 4 pour le traitement des couleurs CSS à 4 et 8 chiffres hexadécimaux.
Module de couleur CSS niveau 4 est compatible avec Chrome depuis la version 52, mais WebView désactive actuellement la fonctionnalité parce que les applications Android existantes contiennent des couleurs hexadécimales 32 bits dans l'ordre Android (ARVB), ce qui entraînerait des erreurs de rendu.
Par exemple, la couleur #80ff8080
est actuellement affichée en
WebView en tant qu'opaque
rouge clair (#ff8080
) pour les applications ciblant les niveaux d'API 27 ou inférieurs. Les leaders
(qui serait interprété par Android comme étant le composant alpha) est
est ignoré pour le moment. Si une application cible le niveau d'API 28 ou supérieur, #80ff8080
est
interprétée comme une valeur de 50% vert clair et transparent (#80ff80
).
Détection du type MIME pour le fichier: URI
Les versions d'Android antérieures à Android 9 pouvaient déduire les types MIME à partir du fichier
contenus. À partir d'Android 9 (niveau d'API 28), les applications doivent utiliser
l'extension de fichier correcte lors du chargement d'URI file:
dans un
WebView :
L'utilisation du contenu du fichier pour déduire les types MIME peut être une source de bugs de sécurité, et cela n'est généralement pas autorisé par les navigateurs récents.
Si l'extension d'un fichier est reconnue comme .html
,
.txt
, .js
ou .css
: le type MIME sera déterminé par l'extension.
Si un fichier n'a pas d'extension ou si elle n'est pas reconnue, le type MIME sera brut
du texte.
Par exemple, un URI tel que file:///sdcard/test.html
sera affiché sous la forme
HTML, mais un URI comme file:///sdcard/test
s'affichera en texte brut,
même si le fichier contient des données HTML.
Élément de défilement du document
Android 9 gère correctement le cas où la racine d'un document est l'élément défilant. Dans les versions antérieures, la position de défilement était définie sur l'élément du corps. l'élément racine n'avait aucune valeur de défilement. Android 9 permet conforme aux normes, où l'élément de défilement est la racine .
De plus, l'accès direct à document.body.scrollTop
, document.body.scrollLeft
document.documentElement.scrollTop
ou document.documentElement.scrollLeft
se comporteront différemment
selon le SDK cible. Pour accéder à la fenêtre d'affichage, faites défiler
utilisez document.scrollingElement
, le cas échéant.
Notifications des applications suspendues
Avant Android 9, les notifications des applications suspendues étaient annulées. À partir d'Android 9, les notifications des applications suspendues sont masquées jusqu'à l'application est réactivée.