Fonctionnalités et API d'Android 10

Android 10 offre des fonctionnalités et des capacités exceptionnelles aux utilisateurs et aux développeurs. Ce document présente les fonctionnalités disponibles pour les développeurs.

Pour en savoir plus sur les API, consultez le rapport de différences des API ou la documentation de référence des API Android. Recherchez les API "ajoutées au niveau d'API 29". Consultez également les changements de comportement d'Android 10 (pour les applications ciblant le niveau d'API 29 et pour toutes les applications) ainsi que les modifications concernant la confidentialité pour savoir dans quels domaines les changements de plate-forme peuvent affecter vos applications.

Renforcement de la sécurité

Android 10 introduit un certain nombre de fonctionnalités de sécurité, qui sont résumées dans les sections suivantes.

Amélioration des boîtes de dialogue d'authentification biométrique

Android 10 apporte les améliorations suivantes dans la prise en charge de l'authentification biométrique:

  • Une vérification de la capacité d'authentification biométrique.
  • Mécanisme de secours qui permet à un utilisateur de s'authentifier à l'aide du code, du schéma ou du mot de passe de son appareil s'il ne peut pas s'authentifier à l'aide de son entrée biométrique.
  • Indice qui indique au système de ne pas exiger la confirmation de l'utilisateur une fois que celui-ci s'est authentifié à l'aide d'une modalité biométrique implicite. Par exemple, vous pouvez indiquer au système qu'aucune autre confirmation ne doit être requise après qu'un utilisateur s'est authentifié à l'aide de l'authentification faciale.

Exécuter le code DEX intégré directement à partir de l'APK

À partir d'Android 10, vous pouvez demander à la plate-forme d'exécuter le code DEX intégré directement à partir du fichier APK de votre application. Cette option peut aider à prévenir une attaque si un pirate informatique parvient à manipuler le code compilé localement sur l'appareil.

Pour en savoir plus, consultez Exécuter le code DEX intégré directement à partir de l'APK.

Compatibilité avec TLS 1.3

Android 10 est compatible avec TLS 1.3. TLS 1.3 est une révision majeure de la norme TLS qui offre des avantages en termes de performances et une sécurité renforcée. Nos analyses comparatives indiquent que les connexions sécurisées peuvent être établies jusqu'à 40 % plus vite avec TLS 1.3 qu'avec TLS 1.2.

Pour en savoir plus sur l'implémentation de TLS 1.3, consultez la section TLS sur les modifications de comportement pour toutes les applications.

API Public Conscrypt

Depuis Android 10, le fournisseur de sécurité Conscrypt inclut une API publique pour la fonctionnalité TLS.

La collection de classes sous android.net.ssl contient des méthodes statiques permettant d'accéder à des fonctionnalités qui ne sont pas disponibles dans les API génériques javax.net.ssl. Les noms de ces classes peuvent être inférés comme le pluriel de la classe javax.net.ssl correspondante. Par exemple, le code qui opère sur des instances de javax.net.ssl.SSLSocket peut utiliser à la place des méthodes de SSLSockets.

Fonctionnalités de connectivité

Android 10 inclut plusieurs améliorations liées à la mise en réseau et à la connectivité.

API Wi-Fi network connection

Android 10 est compatible avec les connexions peer-to-peer. Cette fonctionnalité permet à votre application d'inviter l'utilisateur à modifier le point d'accès auquel l'appareil est connecté en utilisant WifiNetworkSpecifier pour décrire les propriétés d'un réseau demandé. La connexion peer-to-peer est utilisée à des fins autres que la fourniture de réseau, telles que la configuration d'amorçage pour les appareils secondaires tels que Chromecast et le matériel Google Home.

Pour en savoir plus, consultez la page API Wi-Fi Network Request pour la connectivité peer-to-peer.

API Wi-Fi network Suggestion

Android 10 permet à votre application d'inviter l'utilisateur à se connecter à un point d'accès Wi-Fi. Vous pouvez fournir des suggestions de réseau auquel vous connecter. Au final, la plate-forme choisit le point d'accès à accepter en fonction de l'entrée provenant de votre application et d'autres applications.

Pour en savoir plus sur cette fonctionnalité, consultez Suggestions de réseaux Wi-Fi.

Améliorations apportées aux modes Wi-Fi hautes performances et à faible latence

Android 10 vous permet de fournir un indice au modem sous-jacent afin de minimiser la latence.

Android 10 étend l'API Wi-Fi Lock pour assurer une compatibilité efficace avec les modes hautes performances et à faible latence. L'économie d'énergie Wi-Fi est désactivée pour le mode hautes performances et à faible latence. Il est également possible d'activer l'optimisation de la latence en mode à faible latence, en fonction de la compatibilité du modem.

Le mode à faible latence n'est activé que lorsque l'application qui acquiert le verrouillage est exécutée au premier plan et que l'écran est allumé. Le mode à faible latence est particulièrement utile pour les applications de jeu mobiles en temps réel.

Recherches spécialisées dans le résolveur DNS

Android 10 offre une compatibilité native avec les résolutions DNS spécialisées utilisant à la fois des résolutions en texte clair et le mode DNS sur TLS. Auparavant, le résolveur DNS de la plate-forme n'acceptait que les enregistrements A et AAAA, qui permettaient de rechercher uniquement les adresses IP associées à un nom, mais ne prenait en charge aucun autre type d'enregistrement. L'API DnsResolver fournit une résolution générique et asynchrone qui vous permet de rechercher SRV, NAPTR et d'autres types d'enregistrements. Notez que l'analyse de la réponse revient à l'application.

Pour les applications basées sur NDK, consultez android_res_nsend.

Wi-Fi Easy Connect

Android 10 vous permet d'utiliser Easy Connect pour provisionner des identifiants Wi-Fi sur un appareil pair, en remplacement de WPS, qui est désormais obsolète. Les applications peuvent intégrer Easy Connect dans leur flux de configuration et de provisionnement à l'aide de l'intent ACTION_PROCESS_WIFI_EASY_CONNECT_URI.

Pour en savoir plus sur cette fonctionnalité, consultez la page Wi-Fi Easy Connect.

API Wi-Fi Direct Connection

Les classes d'API WifiP2pConfig et WifiP2pManager ont fait l'objet de mises à jour dans Android 10 pour permettre l'établissement de connexions rapides via Wi-Fi Direct à l'aide d'informations prédéterminées. Ces informations sont partagées via un canal latéral, tel que le Bluetooth ou le NFC.

L'exemple de code suivant montre comment créer un groupe à l'aide d'informations prédéterminées:

Kotlin

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

Java

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

Pour rejoindre un groupe à l'aide d'identifiants, remplacez manager.createGroup() par ce qui suit:

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

Canaux orientés connexion Bluetooth LE (CoC)

Android 10 permet à votre application d'utiliser des connexions CoC BLE pour transférer des flux de données plus volumineux entre deux appareils BLE. Cette interface élimine le Bluetooth et les mécanismes de connectivité pour simplifier l'implémentation.

Fonctionnalités de téléphonie

Android 10 comprend plusieurs améliorations liées à la téléphonie.

Amélioration de la qualité des appels

Android 10 permet de collecter des informations sur la qualité des appels IMS (IP Multimedia Subsystem) en cours, y compris la qualité vers et depuis le réseau, sur les appareils compatibles avec cette fonctionnalité.

Filtrage d'appel et affichage du numéro de l'appelant

Android 10 fournit à votre application un moyen d'identifier les appels qui ne figurent pas dans le carnet d'adresses de l'utilisateur comme d'éventuels appels indésirables, et de les refuser discrètement au nom de l'utilisateur. Les informations sur ces appels bloqués sont consignées en tant qu'appels bloqués dans le journal d'appels afin d'offrir une plus grande transparence à l'utilisateur lorsqu'il manque des appels. Grâce à cette API, il n'est pas nécessaire d'obtenir les autorisations READ_CALL_LOG de l'utilisateur pour fournir les fonctionnalités de filtrage d'appel et d'affichage du numéro de l'appelant.

API du service de redirection des appels

Android 10 modifie la façon dont les intents d'appel sont gérés. La diffusion NEW_OUTGOING_CALL est obsolète et a été remplacée par l'API CallRedirectionService. L'API CallRedirectionService fournit des interfaces vous permettant de modifier les appels sortants effectués par la plate-forme Android. Par exemple, des applications tierces peuvent annuler des appels et les rediriger via VoIP.

Améliorations apportées à la création de fichiers dans l'espace de stockage externe

En plus d'introduire l'espace de stockage cloisonné, Android 10 ajoute les fonctionnalités suivantes liées au stockage externe:

  • Vous pouvez utiliser l'option IS_PENDING pour accorder à votre application un accès exclusif à un fichier multimédia lorsqu'il est écrit sur le disque.
  • Si vous connaissez un emplacement spécifique dans lequel stocker les fichiers, vous pouvez indiquer au système où stocker les fichiers nouvellement écrits.
  • Chaque périphérique de stockage externe possède un nom de volume unique.

Multimédia et graphismes

Android 10 introduit les nouvelles API et fonctionnalités multimédias et graphiques suivantes:

Partage de l'entrée audio

Android 10 permet à deux applications de partager simultanément l'entrée audio. Pour en savoir plus, consultez la section Partage d'entrée audio.

Capture de la lecture audio

Android 10 permet à une application d'enregistrer la lecture audio d'autres applications. Pour en savoir plus, consultez la section Capture de lecture.

Barre de recherche dans les notifications MediaStyle

À partir d'Android 10, les notifications MediaStyle affichent une barre de recherche. La barre de recherche indique la progression de la lecture à partir de PlaybackState.getPosition(). Dans certains cas, elle peut être utilisée pour rechercher un emplacement dans le programme de lecture. L'apparence et le comportement de la barre de recherche sont contrôlés par les règles suivantes:

  • La barre de recherche apparaît s'il existe un élément MediaSession actif et que sa durée (spécifiée par MediaMetadata.METADATA_KEY_DURATION) est supérieure à zéro. Cela signifie que la barre ne s'affiche pas pour les flux indéterminés tels que les diffusions en direct et les émissions radio.
  • Si la session implémente ACTION_SEEK_TO, l'utilisateur peut faire glisser la barre de recherche pour contrôler le lieu de lecture.

API MIDI native

L'API Android Native MIDI (AMidi) permet aux développeurs d'applications d'envoyer et de recevoir des données MIDI avec du code C/C++. Cette API s'intègre plus étroitement à leur logique de contrôle/audio C/C++ et réduit le recours à JNI.

Pour en savoir plus, consultez la page API Android Native MIDI.

Améliorations de MediaCodecInfo

Android 10 ajoute des méthodes à MediaCodecInfo qui révèlent plus d'informations sur un codec.

Pour en savoir plus, consultez la section Codecs multimédias.

API Thermal

Lorsque les appareils surchauffent, ils peuvent limiter le processeur et/ou le GPU, ce qui peut affecter les applications et les jeux de manière inattendue. Les applications qui utilisent des graphismes complexes, des calculs complexes ou une activité réseau soutenue sont plus susceptibles de rencontrer des problèmes. Ceux-ci peuvent varier selon les appareils en fonction du chipset et des fréquences de base, des niveaux d'intégration, ainsi que du packaging et du facteur de forme de l'appareil.

Sous Android 10, les applications et les jeux peuvent utiliser une API thermique pour surveiller les changements sur l'appareil et prendre des mesures pour maintenir une consommation d'énergie inférieure afin de rétablir une température normale. Les applications enregistrent un écouteur dans PowerManager, via lequel le système signale l'état thermique en continu, allant de léger, modéré à sévère, critique, d'urgence et d'arrêt.

Lorsque l'appareil signale un stress thermique, les applications et les jeux peuvent aider en arrêtant les activités en cours pour réduire la consommation d'énergie de différentes manières. Par exemple, les applications de streaming peuvent réduire la résolution/le débit binaire ou le trafic réseau, une application d'appareil photo peut désactiver le flash ou l'amélioration intensive des images, un jeu peut réduire la fréquence d'images ou la tesselation des polygones, une application multimédia peut réduire le volume du haut-parleur et une application de cartes peut désactiver le GPS.

L'API Thermal nécessite une nouvelle couche HAL pour les appareils. Elle est actuellement compatible avec les appareils Pixel équipés d'Android 10. Nous collaborons avec nos fabricants d'appareils pour proposer une prise en charge étendue à l'écosystème le plus rapidement possible.

Appareil photo et images

Android 10 introduit les nouvelles fonctionnalités suivantes liées à l'appareil photo et aux images:

Compatibilité avec les appareils photo monochromes

Android 9 (niveau d'API 28) a d'abord introduit la fonctionnalité d'appareil photo monochrome. Android 10 ajoute plusieurs améliorations pour prendre en charge les appareils photo monochromes:

  • Prise en charge du format de flux Y8 pour une meilleure efficacité de la mémoire.
  • Prise en charge de la capture DNG brute monochrome.
  • Introduction des énumérations CFA MONO et NIR pour faire la distinction entre les caméras monochromes standards et les caméras infrarouges proches.

Vous pouvez utiliser cette fonctionnalité pour capturer une image monochrome native. Un appareil logique multicaméra peut utiliser une caméra monochrome comme sous-caméra physique pour obtenir une meilleure qualité d'image par faible luminosité.

Format dynamique de profondeur

À partir d'Android 10, les appareils photo peuvent stocker les données de profondeur d'une image dans un fichier distinct, à l'aide d'un nouveau schéma appelé Dynamic Depth Format (DDF). Les applications peuvent demander à la fois l'image JPG et ses métadonnées de profondeur, en utilisant ces informations pour appliquer le flou de post-traitement sans modifier les données de l'image d'origine.

Pour lire les spécifications relatives à ce format, consultez l'article Format dynamique de profondeur.

Format de fichier image haute efficacité

Le format HEIF (High Efficiency Image File) est un format d'image et de vidéo standard qui introduit un encodage de meilleure qualité et une taille de fichier plus petite par rapport à d'autres formats de fichiers.

Pour en savoir plus sur le format de fichier, consultez la page HEIC.

Améliorations apportées à la fonctionnalité multi-caméra

Android 10 améliore la fusion de plusieurs caméras en une seule caméra logique, une fonctionnalité introduite dans Android 9 (niveau d'API 28). Les éléments suivants ont été ajoutés à l'API Camera2:

API Accessibility Services

Android 10 introduit les nouvelles fonctionnalités et API suivantes des services d'accessibilité:

Indicateur de clé d'entrée AccessibilityNodeInfo

À partir d'Android 10, vous pouvez appeler isTextEntryKey() pour déterminer si un AccessibilityNodeInfo donné représente une touche de saisie de texte faisant partie d'un clavier ou d'un clavier.

Commentaires audio de la boîte de dialogue d'accessibilité

Si les utilisateurs doivent utiliser le raccourci d'accessibilité pour démarrer un service d'accessibilité, Android 10 autorise la boîte de dialogue d'être accompagnée d'une invite de synthèse vocale si le service le demande.

Raccourci d'accessibilité lorsque la navigation par gestes est activée

Lorsque la fonctionnalité de navigation par gestes est activée dans Android 10, le bouton Accessibilité n'est ni visible, ni sélectionnable. Pour accéder au menu des services d'accessibilité, les utilisateurs doivent effectuer l'un des gestes suivants:

  • Balayez l'écran vers le haut avec deux doigts.
  • Balayez l'écran vers le haut avec deux doigts et appuyez de manière prolongée.

Raccourci d'accessibilité pour les claviers physiques

Sous Android 10, les utilisateurs peuvent déclencher le raccourci d'accessibilité sur un clavier physique en appuyant sur Ctrl+Alt+Z.

Amélioration de la télécommande pour le clavier virtuel

Dans Android 10, les services d'accessibilité peuvent demander l'affichage du clavier virtuel même lorsque l'appareil détecte un clavier physique connecté. Les utilisateurs peuvent ignorer ce comportement.

Délais d'inactivité définis par l'utilisateur

Android 10 introduit l'API getRecommendedTimeoutMillis(). Cette méthode prend en charge les délais avant expiration définis par l'utilisateur pour les éléments d'interface utilisateur interactifs et non interactifs. La valeur renvoyée est influencée à la fois par les préférences utilisateur et par les API des services d'accessibilité.

Améliorations de la saisie automatique

Android 10 inclut les améliorations suivantes apportées au service de saisie automatique.

Requêtes de saisie automatique liées à la compatibilité

Vous pouvez utiliser l'option FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST pour déterminer si une requête de saisie automatique a été générée via le mode de compatibilité.

Enregistrer simultanément le nom d'utilisateur et le mot de passe

Vous pouvez utiliser l'option SaveInfo.FLAG_DELAY_SAVE lorsqu'une application utilise plusieurs activités pour afficher le nom d'utilisateur, le mot de passe et d'autres champs.

Interaction de l'utilisateur avec l'interface utilisateur "Enregistrer"

Vous pouvez afficher et masquer un champ de mot de passe dans une boîte de dialogue d'enregistrement en définissant un écouteur d'action sur la boîte de dialogue et en modifiant la visibilité de l'affichage à distance du mot de passe correspondant.

Prise en charge de la mise à jour des ensembles de données

La saisie automatique peut mettre à jour les mots de passe existants. Par exemple, si un utilisateur a déjà stocké un mot de passe et qu'il en enregistre un nouveau, la saisie automatique l'invite à mettre à jour le mot de passe existant au lieu d'en enregistrer un nouveau.

Améliorations apportées à la classification de champs

Android 10 inclut les améliorations suivantes apportées à l'API Field Classification.

Constructeur UserData.Builder

Le constructeur UserData.Builder a été modifié pour mieux s'aligner sur le modèle Builder.

Autoriser le mappage d'une valeur avec plusieurs types d'ID de catégorie

Lorsque vous utilisez UserData.Builder dans Android 10, vous pouvez désormais mapper une valeur à plusieurs types d'ID de catégorie. Dans les versions précédentes, une exception était générée si une valeur était ajoutée plusieurs fois.

Meilleure prise en charge des numéros de carte de crédit

La classification des champs peut désormais détecter des nombres à quatre chiffres comme étant les quatre derniers chiffres d'un numéro de carte de crédit.

Prise en charge de la classification de champs spécifique à une application

Android 10 ajoute FillResponse.setUserData(), qui vous permet de définir des données utilisateur spécifiques à l'application pour la durée de la session. Cela permet au service de saisie automatique de détecter les types de champs comportant du contenu spécifique à l'application.

Commandes système et UI

Android 10 apporte les améliorations suivantes au niveau de l'interface utilisateur:

Prise en charge des limites JVMTI PopFrame

Android 10 est compatible avec la fonctionnalité can_pop_frames dans l'implémentation JVMTI Android. Lors du débogage, cette fonctionnalité vous permet d'exécuter à nouveau des fonctions après avoir effectué une mise en pause à un point d'arrêt et ajusté des éléments locaux, des éléments généraux ou l'implémentation d'une fonction. Pour en savoir plus, consultez la page de référence sur Pop Frame d'Oracle.

API Surface Control

Android 10 fournit une API SurfaceControl pour un accès de bas niveau au compositeur du système (SurfaceFlinger). Pour la plupart des utilisateurs, SurfaceView est le moyen idéal d'exploiter le compositeur. L'API SurfaceControl peut être utile dans certains cas, par exemple:

  • Synchroniser plusieurs surfaces
  • Représentation vectorielle continue de la surface entre les processus
  • Gestion de la durée de vie de niveau inférieur

L'API SurfaceControl est disponible à la fois dans les liaisons SDK et NDK. L'implémentation du NDK comprend une API pour l'échange manuel de tampons avec le compositeur. Il s'agit d'une alternative aux utilisateurs qui ont dépassé les limites de BufferQueue.

Détection du moteur de rendu "Hook" de WebView

Android 10 introduit la classe abstraite WebViewRenderProcessClient, que les applications peuvent utiliser pour détecter si un WebView ne répond plus. Pour utiliser cette classe:

  1. Définissez votre propre sous-classe, et implémentez ses méthodes onRenderProcessResponsive() et onRenderProcessUnresponsive().
  2. Associez une instance de votre WebViewRenderProcessClient à un ou plusieurs objets WebView.
  3. Si WebView ne répond plus, le système appelle la méthode onRenderProcessUnresponsive() du client, en transmettant WebView et WebViewRenderProcess. (Si l'WebView implique un seul processus, le paramètre WebViewRenderProcess est nul.) Votre application peut prendre les mesures appropriées, par exemple afficher une boîte de dialogue pour demander à l'utilisateur s'il souhaite arrêter le processus d'affichage.

Si WebView ne répond toujours pas, le système appelle régulièrement onRenderProcessUnresponsive() (pas plus d'une fois toutes les cinq secondes), mais n'effectue aucune autre action. Si WebView redevient responsif, le système n'appelle onRenderProcessResponsive() qu'une seule fois.

Panneaux de paramètres

Android 10 introduit les panneaux de paramètres, une API qui permet aux applications d'afficher les paramètres pour les utilisateurs dans le contexte de leur application. Cela évite aux utilisateurs d'avoir à accéder aux paramètres pour modifier des éléments comme NFC ou les données mobiles afin d'utiliser l'application.

Figure 1 : L'utilisateur tente d'ouvrir une page Web lorsque l'appareil n'est pas connecté au réseau. Chrome affiche le panneau des paramètres Connectivité Internet.

Figure 2. L'utilisateur peut activer le Wi-Fi et sélectionner un réseau sans quitter l'application Chrome.

Par exemple, supposons qu'un utilisateur ouvre un navigateur Web lorsque son appareil est en mode Avion. Avant Android 10, l'application ne pouvait afficher qu'un message générique demandant à l'utilisateur d'ouvrir les paramètres pour restaurer la connectivité. Avec Android 10, l'application de navigateur peut afficher un panneau intégré affichant les principaux paramètres de connectivité tels que le mode Avion, le Wi-Fi (y compris les réseaux à proximité) et les données mobiles. Grâce à ce panneau, les utilisateurs peuvent restaurer la connectivité sans quitter l'application.

Pour afficher un panneau de paramètres, déclenchez un intent avec l'une des actions Settings.Panel suivantes:

Kotlin

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

Java

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type peut être l'un des suivants:

ACTION_INTERNET_CONNECTIVITY
Affiche les paramètres liés à la connectivité Internet, tels que le mode Avion, le Wi-Fi et les données mobiles.
ACTION_WIFI
Affiche les paramètres Wi-Fi, mais pas les autres paramètres de connectivité. Cela est utile pour les applications qui ont besoin d'une connexion Wi-Fi pour effectuer des importations ou des téléchargements volumineux.
ACTION_NFC
Affiche tous les paramètres liés à la technologie NFC(communication en champ proche).
ACTION_VOLUME
Affiche les paramètres de volume de tous les flux audio.

Amélioration du partage

Android 10 offre un certain nombre d'améliorations concernant le partage:

API de partage des raccourcis

L'API de raccourcis de partage remplace les API de partage direct.

Au lieu de récupérer les résultats de manière réactive à la demande, l'API de raccourcis de partage permet aux applications de publier des cibles de partage direct à l'avance. Voici comment fonctionne ShortcutManager. Les deux API étant similaires, nous avons développé l'API ShortcutInfo pour faciliter l'utilisation des deux fonctionnalités. Avec l'API de raccourcis de partage, vous pouvez attribuer directement des catégories ou des personnes à une cible de partage. Les cibles de partage persistent dans le système jusqu'à ce que la même application les mette à jour ou que l'application soit désinstallée.

L'ancien mécanisme de partage direct fonctionne toujours, mais les applications qui l'utilisent ont une priorité inférieure à celle des applications qui utilisent l'API de raccourcis de partage.

ShortcutInfo.Builder ajoute et améliore des méthodes pour fournir des informations supplémentaires sur la cible de partage.

Cibles de partage direct

Vous pouvez publier un raccourci dynamique en tant que cible de partage direct. Consultez Publier des cibles de partage direct.

ShortcutManagerCompat est une nouvelle API AndroidX qui offre une rétrocompatibilité avec l'ancienne API DirectShare. Il s'agit de la méthode privilégiée pour publier des cibles de partage.

Prévisualisation du texte

Lorsqu'une application partage du contenu textuel, elle peut afficher un aperçu facultatif du contenu dans l'interface utilisateur de Sharesheet.

Consultez la section Ajouter des aperçus en texte enrichi.

En savoir plus

Pour en savoir plus sur la manière dont les applications peuvent partager des données, consultez Envoyer des données simples à d'autres applications et Recevoir des données simples depuis d'autres applications.

Thème sombre

Android 10 propose un thème sombre qui s'applique à la fois à l'interface utilisateur du système Android et aux applications exécutées sur l'appareil. Pour en savoir plus, consultez la section Thème sombre.

Types de services de premier plan

Android 10 introduit l'attribut de fichier manifeste XML foregroundServiceType, que vous incluez dans la définition de plusieurs services spécifiques. Il est possible, bien que rarement approprié, d'attribuer plusieurs types de services de premier plan à un service particulier.

Le tableau suivant présente les différents types de services de premier plan et les services pour lesquels il convient de déclarer un type spécifique:

Type de service de premier plan Exemple de cas d'utilisation pour un service devant déclarer ce type
connectedDevice Surveiller un bracelet pour la forme au quotidien
dataSync Télécharger des fichiers depuis un réseau
location Continuer une action déclenchée par l'utilisateur
mediaPlayback Lire un livre audio, un podcast ou de la musique
mediaProjection Enregistrer une vidéo de l'écran de l'appareil sur une courte période
phoneCall Gérer l'appel téléphonique en cours

Kotlin

Android 10 inclut les mises à jour suivantes pour le développement en Kotlin.

Annotations de possibilité de valeur nulle pour les API Libcore

Android 10 améliore la couverture des annotations de possibilité de valeur nulle dans le SDK pour les API libcore. Ces annotations permettent aux développeurs d'applications qui utilisent l'analyse de possibilité de valeur nulle Kotlin ou Java dans Android Studio d'obtenir des informations sur la nullité lorsqu'ils interagissent avec ces API.

Normalement, les violations du contrat de possibilité de valeur nulle en Kotlin entraînent des erreurs de compilation. Pour assurer la compatibilité avec votre code existant, seules les annotations @RecentlyNullable et @RecentlyNonNull sont ajoutées. Cela signifie que les cas de non-respect de la possibilité de valeur nulle génèrent des avertissements au lieu d'erreurs.

De plus, toutes les annotations @RecentlyNullable ou @RecentlyNonNull ajoutées dans Android 9 deviennent respectivement @Nullable et @NonNull. Cela signifie que, sous Android 10 et versions ultérieures, les cas de non-respect de la possibilité de valeur nulle génèrent des erreurs plutôt que des avertissements.

Pour en savoir plus sur les modifications apportées aux annotations, consultez la section Le SDK Android Pie est désormais plus compatible avec Kotlin sur le blog des développeurs Android.

NDK

Android 10 inclut les modifications NDK suivantes.

Amélioration du débogage de la propriété des descripteurs de fichier

Android 10 ajoute fdsan, qui vous aide à détecter et à résoudre plus facilement les problèmes de propriété des descripteurs de fichier.

Les bugs liés à une mauvaise gestion de la propriété du descripteur de fichier, qui ont tendance à se manifester sous la forme use-after-close et double-close, sont analogues aux bugs d'allocation de mémoire use-after-free et double-free, mais sont généralement beaucoup plus difficiles à diagnostiquer et à corriger. fdsan tente de détecter et/ou d'éviter une mauvaise gestion des descripteurs de fichier en appliquant la propriété du descripteur de fichier.

Pour en savoir plus sur les plantages liés à ces problèmes, consultez la section Erreur détectée par la fdsan. Pour en savoir plus sur la fdsan, consultez la page Googlesource sur la fdsan.

TLS ELF

Les applications créées à l'aide du NDK avec un niveau d'API minimal 29 peuvent utiliser ELF TLS au lieu de emutls. La compatibilité avec les éditeur de liens dynamiques et statiques a été ajoutée pour prendre en charge cette méthode de gestion des variables thread locales.

Pour les applications conçues pour le niveau d'API 28 ou inférieur, des améliorations ont été mises en œuvre pour que libgcc/compiler-rt permette de contourner certains problèmes liés à emutls.

Pour en savoir plus, consultez Modifications Android pour les développeurs NDK.

Runtime

Android 10 inclut la modification d'environnement d'exécution suivante.

Déclenchement de la récupération de mémoire basée sur Mallinfo

Lorsque des objets Java de petite plate-forme font référence à des objets volumineux dans le tas de mémoire C++, ils ne peuvent souvent être récupérés que lorsque l'objet Java est collecté et, par exemple, finalisé. Dans les versions précédentes, la plate-forme a estimé la taille de nombreux objets C++ associés à des objets Java. Cette estimation n'était pas toujours exacte et entraînait parfois une augmentation significative de l'utilisation de la mémoire, car la plate-forme n'avait pas réussi à récupérer la mémoire alors qu'elle aurait dû l'être.

Dans Android 10, le récupérateur de mémoire suit la taille totale du tas de mémoire alloué par malloc() système, ce qui garantit que les allocations malloc() importantes sont toujours incluses dans les calculs déclenchant la récupération de mémoire. Les applications qui entrelacent un grand nombre d'allocations C++ avec une exécution Java peuvent entraîner une augmentation de la fréquence de récupération de mémoire. Vous constaterez peut-être une légère baisse pour d'autres applications.

Tests et débogage

Android 10 inclut les améliorations suivantes pour les tests et le débogage.

Améliorations apportées au traçage système sur l'appareil.

Depuis Android 10, vous pouvez spécifier des limites pour la taille et la durée d'une trace lorsque vous effectuez une trace système sur l'appareil. Lorsque vous spécifiez l'une ou l'autre des valeurs, le système effectue une trace longue, en copiant périodiquement le tampon de trace dans le fichier de destination pendant l'enregistrement de la trace. La trace se termine une fois que les limites de taille ou de durée que vous avez spécifiées sont atteintes.

Utilisez ces paramètres supplémentaires pour tester différents cas d'utilisation qu'avec une trace standard. Par exemple, vous pouvez diagnostiquer un bug de performances qui ne se produit qu'après l'exécution de votre application pendant une longue période. Dans ce cas, vous pouvez enregistrer une longue trace sur une journée entière, puis analyser le planificateur de processeur, l'activité du disque, les threads d'application et d'autres données dans le rapport pour vous aider à déterminer la cause du bug.

Sous Android 10 et versions ultérieures, les fichiers de suivi sont enregistrés dans un format pouvant être ouvert avec Perfetto, un projet Open Source conçu pour l'instrumentation des performances et le traçage. Vous pouvez convertir les fichiers de suivi de Perfetto au format Systrace.

Améliorations apportées à TextClassifier

Android 10 fournit des fonctionnalités supplémentaires de classification de texte dans l'interface TextClassifier.

Détection de la langue

La méthode detectLanguage() fonctionne de la même manière que les méthodes de classification existantes. Elle reçoit un objet TextLanguage.Request et renvoie un objet TextLanguage.

Les objets TextLanguage sont constitués d'une liste de paires ordonnées. Chaque paire contient des paramètres régionaux et un score de confiance correspondant pour la classification.

Suggestions d'actions de conversation

La méthode suggestConversationActions() fonctionne de la même manière que les méthodes de classification existantes. Elle reçoit un objet ConversationActions.Request et renvoie un objet ConversationActions.

Les objets ConversationActions sont constitués d'une liste d'objets ConversationAction. Chaque objet ConversationAction inclut une action suggérée potentielle et son score de confiance.

Réponses suggérées/Actions dans les notifications

Android 9 a introduit la possibilité d'afficher des réponses suggérées dans une notification. Android 10 développe cela avec la possibilité d'inclure des actions suggérées basées sur l'intent. De plus, la plate-forme peut générer ces suggestions automatiquement. Les applications peuvent toujours fournir leurs propres suggestions ou désactiver celles générées par le système.

L'API utilisée pour générer ces réponses fait partie de TextClassifier et a également été directement exposée aux développeurs dans Android 10. Pour en savoir plus, consultez la section sur les améliorations apportées à TextClassifier.

Si votre application fournit ses propres suggestions, la plate-forme ne génère pas de suggestions automatiques. Si vous ne souhaitez pas que les notifications de votre application affichent des suggestions de réponses ou d'actions, vous pouvez désactiver les réponses et les actions générées par le système à l'aide de setAllowGeneratedReplies() et setAllowSystemGeneratedContextualActions().