Présentation des fonctionnalités et des API

Android 14 offre aux développeurs de nouvelles fonctionnalités et API de qualité. Les sections suivantes vous présentent les nouvelles fonctionnalités disponibles pour vos applications et leurs nouvelles API.

Pour obtenir une liste détaillée des API ajoutées, modifiées et supprimées, consultez le rapport de différences des API. Pour en savoir plus sur les API ajoutées, consultez la documentation de référence des API Android. Pour Android 14, recherchez les API ajoutées au niveau d'API 34. Pour savoir dans quels domaines les changements de plate-forme peuvent affecter vos applications, consultez les modifications de comportement d'Android 14 pour les applications ciblant Android 14 et pour toutes les applications.

Internationalisation

Préférences linguistiques par application

Android 14 扩展了 Android 13(API 级别 33)中引入的按应用设定语言功能,并包含以下额外功能:

  • 自动生成应用的 localeConfig:从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始,您可以将应用配置为自动支持各应用语言偏好设定。Android Gradle 插件会根据您的项目资源生成 LocaleConfig 文件,并在最终清单文件中添加对该文件的引用,这样您就不再需要手动创建或更新该文件。AGP 使用应用模块的 res 文件夹中的资源以及任何库模块依赖项来确定要在 LocaleConfig 文件中添加的语言区域。

  • 动态更新应用的 localeConfig:使用 LocaleManager 方法中的 setOverrideLocaleConfig()getOverrideLocaleConfig() 可以在设备的系统设置中动态更新应用的受支持语言列表。有了这种灵活性,您可以按区域自定义支持的语言列表、运行 A/B 实验,或者如果您的应用通过服务器端推送进行本地化,则可以提供更新后的语言区域列表。

  • 输入法 (IME) 的应用语言可见性:IME 可以利用 getApplicationLocales() 方法查看当前应用的语言,并将 IME 语言与该语言进行匹配。

API Grammatical Inflection

3 milliards de personnes parlent des langues genrées : des langues dont les catégories grammaticales, telles que les noms, verbes, adjectifs et prépositions, s'accordent en fonction du genre des personnes et des objets auxquels on s'adresse ou dont on parle. Traditionnellement, de nombreuses langues genrées utilisent le genre grammatical masculin comme genre par défaut ou générique.

S'adresser à une personne en utilisant le mauvais genre grammatical, par exemple s'adresser à une femme en utilisant le genre masculin, peut avoir un impact négatif sur son comportement et son attitude. En revanche, une interface utilisateur dont le langage reflète correctement le genre grammatical de l'utilisateur ou de l'utilisatrice peut améliorer l'engagement et fournir une expérience utilisateur plus personnalisée et naturelle.

To help you build a user-centric UI for gendered languages, Android 14 introduces the Grammatical Inflection API, which lets you add support for grammatical gender without refactoring your app.

Préférences régionales

Regional preferences enable users to personalize temperature units, the first day of the week, and numbering systems. A European living in the United States might prefer temperature units to be in Celsius rather than Fahrenheit and for apps to treat Monday as the beginning of the week instead of the US default of Sunday.

New Android Settings menus for these preferences provide users with a discoverable and centralized location to change app preferences. These preferences also persist through backup and restore. Several APIs and intents—such as getTemperatureUnit and getFirstDayOfWeek— grant your app read access to user preferences, so your app can adjust how it displays information. You can also register a BroadcastReceiver on ACTION_LOCALE_CHANGED to handle locale configuration changes when regional preferences change.

To find these settings, open the Settings app and navigate to System > Languages & input > Regional preferences.

Regional preferences screen in Android system settings.
Temperature options for regional preferences in Android system settings.

Accessibilité

Mise à l'échelle non linéaire de la police à 200 %

À partir d'Android 14, le système prend en charge la mise à l'échelle des polices jusqu'à 200 %, offrant ainsi aux utilisateurs déficients visuels des options d'accessibilité supplémentaires qui respectent les consignes d'accessibilité du contenu Web (WCAG).

Pour éviter que les éléments de texte de grande taille ne soient trop grands à l'écran, le système applique une courbe de mise à l'échelle non linéaire. Cette stratégie de mise à l'échelle signifie que le texte de grande taille n'a pas le même niveau de mise à l'échelle que le texte de petite taille. La mise à l'échelle non linéaire de la police permet de préserver la hiérarchie proportionnelle entre des éléments de différentes tailles, tout en limitant les problèmes liés à la mise à l'échelle linéaire du texte à des degrés élevés (par exemple, le texte coupé ou le texte qui est plus difficile à lire sur de très grands écrans).

Tester votre application avec la mise à l'échelle non linéaire de la police

Activez la taille de police maximale dans les paramètres d'accessibilité d'un appareil pour tester votre application.

Si vous utilisez déjà des unités de pixels mis à l'échelle (sp) pour définir la taille du texte, ces d'autres options et des améliorations de scaling sont appliquées automatiquement du texte dans votre application. Toutefois, vous devez quand même effectuer des tests de l'interface utilisateur avec la taille de police activée (200%) pour vous assurer que votre application les applique correctement et peut s'adapter à des tailles de police plus grandes sans nuire à la facilité d'utilisation.

Pour activer la taille de police 200 %, procédez comme suit :

  1. Ouvrez l'application Paramètres, puis accédez à Accessibility > Display size and text (Accessibilité > Taille d'affichage et texte).
  2. Pour l'option Font size (Taille de la police), appuyez sur l'icône plus (+) jusqu'à ce que le paramètre de taille de police maximale soit activé, comme illustré sur l'image.

Utiliser des unités de pixels mis à l'échelle (sp) pour les tailles de texte

N'oubliez pas de toujours spécifier la taille du texte en unités sp. Lorsque votre application utilise des unités de pixels mis à l'échelle, Android peut appliquer la taille de texte préférée de l'utilisateur et la mettre à l'échelle.

N'utilisez pas les unités de pixels mis à l'échelle pour les marges intérieures ni ne définissez les hauteurs de vue en supposant une marge intérieure implicite. Avec une mise à l'échelle non linéaire de la police, les dimensions des pixels mis à l'échelle peuvent ne pas être proportionnelles. Par conséquent, 4sp + 20sp peut ne pas être égal à 24sp.

Convertir les unités de pixels mis à l'échelle (sp)

Utilisez TypedValue.applyDimension() pour convertir des unités de sp en pixels et TypedValue.deriveDimension() pour convertir des pixels en sp. Ces méthodes appliquent automatiquement la courbe de mise à l'échelle non linéaire appropriée.

Évitez de coder les équations en dur en utilisant Configuration.fontScale ou DisplayMetrics.scaledDensity. La mise à l'échelle de la police n'étant pas linéaire, le champ scaledDensity n'est plus précis. Le champ fontScale ne doit être utilisé qu'à des fins d'information, car les polices ne sont plus mises à l'échelle avec une seule valeur scalaire.

Utiliser des unités sp pour lineHeight

Toujours définir android:lineHeight à l'aide d'unités de sp de dp afin que la hauteur de la ligne s'adapte à votre texte. Sinon, si votre texte est de sp, mais votre lineHeight est en dp ou px, elle n'est pas à l'échelle et semble surchargée. TextView corrige automatiquement les lineHeight pour qu'elles correspondent proportions sont conservées, mais uniquement si textSize et lineHeight sont tous les deux défini en unités de pixels mis à l'échelle.

Appareil photo et médias

Ultra HDR pour les images

Illustration de la qualité d'image SDR (Standard Dynamic Range) par rapport à la qualité d'image HDR (High Dynamic Range).

Android 14 prend en charge les images HDR (plage dynamique élevée) qui conservent davantage d'informations du capteur lors de la prise de vue, ce qui permet d'obtenir des couleurs plus vives et un contraste plus élevé. Android utilise le format Ultra HDR, qui est entièrement rétrocompatible avec les images JPEG. Il permet aux applications d'interagir de manière fluide avec les images HDR, en les affichant en plage dynamique standard (SDR) si nécessaire.

Le rendu de ces images dans l'UI en HDR est effectué automatiquement par le framework lorsque votre application active l'UI HDR pour sa fenêtre d'activité, soit via une entrée de fichier manifeste, soit au moment de l'exécution en appelant Window.setColorMode(). Vous pouvez également prendre des images fixes Ultra HDR compressées sur les appareils compatibles. Avec plus de couleurs récupérées à partir du capteur, le post-traitement peut être plus flexible. Le Gainmap associé aux images Ultra HDR peut être utilisé pour les afficher à l'aide d'OpenGL ou de Vulkan.

Zoom, mise au point, post-visualisation et plus encore dans les extensions de caméras

Android 14 升级并改进了相机扩展程序,让应用能够处理更长的处理时间,从而支持在受支持的设备上使用计算密集型算法(例如弱光摄影)来改善图片。这些功能可让用户在使用相机扩展功能时获得更出色的体验。这些改进的示例包括:

Zoom dans le capteur

CameraCharacteristics 中的 REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE 包含 SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 时,您的应用可以使用高级传感器功能,将剪裁后的 RAW 数据流的像素与全视野范围相同,方法是将 CaptureRequest 与将数据流用例设置为 CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 的 RAW 目标搭配使用。通过实现请求替换控件,更新后的相机可让用户在其他相机控件准备就绪之前使用缩放控件。

Audio USB sans perte

Android 14 gains support for lossless audio formats for audiophile-level experiences over USB wired headsets. You can query a USB device for its preferred mixer attributes, register a listener for changes in preferred mixer attributes, and configure mixer attributes using the AudioMixerAttributes class. This class represents the format, such as channel mask, sample rate, and behavior of the audio mixer. The class allows for audio to be sent directly, without mixing, volume adjustment, or processing effects.

Productivité et outils pour les développeurs

Gestionnaire d'identifiants

Android 14 将 Credential Manager 添加为平台 API,并通过使用 Google Play 服务的 Jetpack 库,向后额外支持 Android 4.4(API 级别 19)设备。Credential Manager 旨在通过 API 使用用户配置的凭据提供程序检索和存储凭据,让用户更轻松地登录。Credential Manager 在单个 API 中支持多种登录方法,包括用户名和密码、通行密钥和联合登录解决方案(如“使用 Google 账号登录”)。

通行密钥具有许多优势。例如,通行密钥是基于业界标准构建的,可在各种不同的操作系统和浏览器生态系统中使用,并且可用于网站和应用。

如需了解详情,请参阅 Credential Manager 和通行密钥文档以及介绍 Credential Manager 和通行密钥的博文

Santé Connect

Santé Connect est un dépôt sur l'appareil pour les données de santé et de remise en forme des utilisateurs. Il permet aux utilisateurs de partager des données entre leurs applications préférées, avec un seul et même endroit pour contrôler les données qu'ils souhaitent partager avec ces applications.

Sur les appareils équipés de versions d'Android antérieures à Android 14, Santé Connect est disponible en téléchargement en tant qu'application sur le Google Play Store. À partir d'Android 14, Santé Connect fait partie de la plate-forme et reçoit les mises à jour via les mises à jour du système Google Play, sans nécessiter de téléchargement distinct. Santé Connect peut ainsi être mis à jour fréquemment, et vos applications peuvent compter sur Santé Connect sur les appareils équipés d'Android 14 ou version ultérieure. Les utilisateurs peuvent accéder à Santé Connect depuis les paramètres de leur appareil, avec des commandes de confidentialité intégrées aux paramètres système.

Les utilisateurs peuvent commencer à utiliser Santé Connect sans télécharger d'application distincte sur les appareils équipés d'Android 14 ou version ultérieure.
Les utilisateurs peuvent contrôler les applications qui ont accès à leurs données de santé et de remise en forme via les paramètres système.

Santé Connect inclut plusieurs nouvelles fonctionnalités dans Android 14, comme les parcours d'exercice, qui permettent aux utilisateurs de partager un parcours de leur entraînement qui peut être visualisé sur une carte. Un parcours est défini comme une liste d'emplacements enregistrés dans une période donnée. Votre application peut insérer des parcours dans des séances d'exercice, en les associant. Pour que les utilisateurs aient un contrôle total sur ces données sensibles, ils doivent autoriser le partage de trajets individuels avec d'autres applications.

Pour en savoir plus, consultez la documentation sur Santé Connect et l'article de blog sur les nouveautés d'Android Santé.

Mises à jour OpenJDK 17

Android 14 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致,包括适合应用和平台开发者的库更新和 Java 17 语言支持。

其中包含以下功能和改进:

  • 将大约 300 个 java.base 类更新为支持 Java 17。
  • 文本块 - 为 Java 编程语言引入了多行字符串字面量。
  • instanceof 模式匹配:可让对象在 instanceof 中被视为具有特定类型,而无需任何额外的变量。
  • 密封类:允许您限制哪些类和接口可以扩展或实现它们。

得益于 Google Play 系统更新 (Project Mainline),6 亿多台设备能够接收包含这些更改的最新 Android 运行时 (ART) 更新。我们致力于为应用提供更加一致、安全的跨设备环境,并为用户提供独立于平台版本的新功能。

Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

Améliorations apportées aux plates-formes de téléchargement d'applications

Android 14 introduit plusieurs API PackageInstaller qui permettent aux plates-formes de téléchargement d'applications d'améliorer leur expérience utilisateur.

Demander l'autorisation de l'installation avant le téléchargement

L'installation ou la mise à jour d'une application peut nécessiter l'autorisation de l'utilisateur. Par exemple, lorsqu'un programme d'installation qui utilise l'autorisation REQUEST_INSTALL_PACKAGES tente d'installer une nouvelle application. Dans les versions précédentes d'Android, les plates-formes de téléchargement d'applications ne pouvaient demander l'autorisation de l'utilisateur qu'une fois les APK écrits dans la session d'installation et que la session était lancée.

À partir d'Android 14, la méthode requestUserPreapproval() permet aux installateurs de demander l'autorisation de l'utilisateur avant de lancer la session d'installation. Cette amélioration permet à une plate-forme de téléchargement d'applications de différer le téléchargement des APK jusqu'à ce que l'installation ait été autorisée par l'utilisateur. En outre, une fois qu'un utilisateur a autorisé l'installation de l'application, la plate-forme de téléchargement d'applications peut la télécharger et l'installer en arrière-plan sans interrompre l'utilisateur.

Revendiquer la responsabilité des prochaines mises à jour

La méthode setRequestUpdateOwnership() permet à un programme d'installation d'indiquer au système qu'il a l'intention d'être responsable des futures mises à jour d'une application qu'il installe. Cette fonctionnalité active l'application forcée de la propriété de la mise à jour, ce qui signifie que seul le propriétaire des mises à jour est autorisé à installer des mises à jour automatiques de l'application. L'application forcée de la propriété de la mise à jour permet de s'assurer que les utilisateurs ne reçoivent des mises à jour que depuis la plate-forme de téléchargement d'applications attendue.

Tout autre programme d'installation, y compris ceux utilisant l'autorisation INSTALL_PACKAGES, doit recevoir une approbation explicite de l'utilisateur pour installer une mise à jour. Si un utilisateur décide de procéder à une mise à jour à partir d'une autre source, la propriété de la mise à jour est perdue.

Mettre à jour les applications au meilleur moment

Les plates-formes de téléchargement d'applications évitent généralement de mettre à jour une application en cours d'utilisation, car cela entraîne la fermeture des processus en cours d'exécution, ce qui peut potentiellement interrompre l'activité de l'utilisateur.

À partir d'Android 14, l'API InstallConstraints permet aux programmes d'installation de s'assurer que les mises à jour de leur application sont effectuées au moment opportun. Par exemple, une plate-forme de téléchargement d'applications peut appeler la méthode commitSessionAfterInstallConstraintsAreMet() pour s'assurer qu'une mise à jour n'est lancée que lorsque l'utilisateur n'interagit plus avec l'application en question.

Installer facilement des divisions facultatives

Avec les APK divisés, les fonctionnalités d'une application peuvent être distribuées dans des fichiers APK distincts plutôt que sous forme d'un APK monolithique. Les APK divisés permettent aux plates-formes de téléchargement d'applications d'optimiser la distribution des différents composants de l'application. Par exemple, les plates-formes de téléchargement d'applications peuvent être optimisées en fonction des propriétés de l'appareil cible. L'API PackageInstaller est compatible avec les divisions depuis son lancement au niveau d'API 22.

Dans Android 14, la méthode setDontKillApp() permet à un programme d'installation d'indiquer que les processus en cours d'exécution de l'application ne doivent pas être supprimés lorsque de nouvelles divisions sont installées. Les plates-formes de téléchargement d'applications peuvent utiliser cette fonctionnalité pour installer facilement les nouvelles fonctionnalités d'une application lorsque l'utilisateur l'utilise.

Bundles de métadonnées d'application

À partir d'Android 14, le programme d'installation du package Android vous permet de spécifier des métadonnées sur votre application, telles que les pratiques en matière de sécurité des données, à inclure sur les pages de la plate-forme de téléchargement d'applications telles que Google Play.

Détecter quand les utilisateurs prennent des captures d'écran de l'appareil

Pour créer une expérience plus standardisée, Android 14 introduit une API de détection des captures d'écran protégeant la confidentialité. Cette API permet aux applications d'enregistrer des rappels par activité. Ces rappels sont appelés, et l'utilisateur en est informé lorsqu'une capture d'écran est prise et que cette activité est visible.

Expérience utilisateur

Actions personnalisées Sharesheet et classement amélioré

Android 14 updates the system sharesheet to support custom app actions and more informative preview results for users.

Add custom actions

With Android 14, your app can add custom actions to the system sharesheet it invokes.

Screenshot of custom actions on the sharesheet.

Improve ranking of Direct Share targets

Android 14 uses more signals from apps to determine the ranking of the direct share targets to provide more helpful results for the user. To provide the most useful signal for ranking, follow the guidance for improving rankings of your Direct Share targets. Communication apps can also report shortcut usage for outgoing and incoming messages.

Direct Share row in the sharesheet, as shown by 1

Prise en charge des animations intégrées et personnalisées pour la prévisualisation du Retour

Video: Predictive back animations

Android 13 introduced the predictive back-to-home animation behind a developer option. When used in a supported app with the developer option enabled, swiping back shows an animation indicating that the back gesture exits the app back to the home screen.

Android 14 includes multiple improvements and new guidance for Predictive Back:

With this Android 14 preview release, all features of Predictive Back remain behind a developer option. See the developer guide to migrate your app to predictive back, as well as the developer guide to creating custom in-app transitions.

Forçages par application des fabricants d'appareils à grand écran

Per-app overrides enable device manufacturers to change the behavior of apps on large screen devices. For example, the FORCE_RESIZE_APP override instructs the system to resize the app to fit display dimensions (avoiding size compatibility mode) even if resizeableActivity="false" is set in the app manifest.

Overrides are intended to improve the user experience on large screens.

New manifest properties enable you to disable some device manufacturer overrides for your app.

Forçages par application pour les utilisateurs de grands écrans

Per-app overrides change the behavior of apps on large screen devices. For example, the OVERRIDE_MIN_ASPECT_RATIO_LARGE device manufacturer override sets the app aspect ratio to 16:9 regardless of the app's configuration.

Android 14 QPR1 enables users to apply per‑app overrides by means of a new settings menu on large screen devices.

Partager le contenu d'une appli sur l'écran

App screen sharing enables users to share an app window instead of the entire device screen during screen content recording.

With app screen sharing, the status bar, navigation bar, notifications, and other system UI elements are excluded from the shared display. Only the content of the selected app is shared.

App screen sharing improves productivity and privacy by enabling users to run multiple apps but limit content sharing to a single app.

Réponse suggérée optimisée par un LLM dans Gboard sur un Pixel 8 Pro

Sur les appareils Pixel 8 Pro avec le Feature Drop de décembre, les développeurs peuvent essayer des réponses intelligentes de meilleure qualité dans Gboard, qui sont optimisées par de grands modèles de langage (LLM) sur l'appareil exécutés sur Google Tensor.

Cette fonctionnalité est disponible en version Preview limitée pour l'anglais américain dans WhatsApp, Line et KakaoTalk. Pour cela, vous devez utiliser un appareil Pixel 8 Pro avec Gboard comme clavier.

Pour tester cette fonctionnalité, activez-la dans Paramètres > Options pour les développeurs > Paramètres AICore > Activer la persistance AICore.

Ouvrez ensuite une conversation dans une application compatible pour voir la réponse suggérée optimisée par LLM dans la bande de suggestions de Gboard en réponse aux messages entrants.

Gboard utilise des LLM sur l'appareil pour fournir des réponses suggérées de meilleure qualité.

Graphiques

Les chemins sont interrogeables et interpolables

Android's Path API is a powerful and flexible mechanism for creating and rendering vector graphics, with the ability to stroke or fill a path, construct a path from line segments or quadratic or cubic curves, perform boolean operations to get even more complex shapes, or all of these simultaneously. One limitation is the ability to find out what is actually in a Path object; the internals of the object are opaque to callers after creation.

To create a Path, you call methods such as moveTo(), lineTo(), and cubicTo() to add path segments. But there has been no way to ask that path what the segments are, so you must retain that information at creation time.

Starting in Android 14, you can query paths to find out what's inside of them. First, you need to get a PathIterator object using the Path.getPathIterator API:

Kotlin

val path = Path().apply {
    moveTo(1.0f, 1.0f)
    lineTo(2.0f, 2.0f)
    close()
}
val pathIterator = path.pathIterator

Java

Path path = new Path();
path.moveTo(1.0F, 1.0F);
path.lineTo(2.0F, 2.0F);
path.close();
PathIterator pathIterator = path.getPathIterator();

Next, you can call PathIterator to iterate through the segments one by one, retrieving all of the necessary data for each segment. This example uses PathIterator.Segment objects, which packages up the data for you:

Kotlin

for (segment in pathIterator) {
    println("segment: ${segment.verb}, ${segment.points}")
}

Java

while (pathIterator.hasNext()) {
    PathIterator.Segment segment = pathIterator.next();
    Log.i(LOG_TAG, "segment: " + segment.getVerb() + ", " + segment.getPoints());
}

PathIterator also has a non-allocating version of next() where you can pass in a buffer to hold the point data.

One of the important use cases of querying Path data is interpolation. For example, you might want to animate (or morph) between two different paths. To further simplify that use case, Android 14 also includes the interpolate() method on Path. Assuming the two paths have the same internal structure, the interpolate() method creates a new Path with that interpolated result. This example returns a path whose shape is halfway (a linear interpolation of .5) between path and otherPath:

Kotlin

val interpolatedResult = Path()
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, .5f, interpolatedResult)
}

Java

Path interpolatedResult = new Path();
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, 0.5F, interpolatedResult);
}

The Jetpack graphics-path library enables similar APIs for earlier versions of Android as well.

Mailles personnalisées avec nuanceurs de vertex et de fragments

Android has long supported drawing triangle meshes with custom shading, but the input mesh format has been limited to a few predefined attribute combinations. Android 14 adds support for custom meshes, which can be defined as triangles or triangle strips, and can, optionally, be indexed. These meshes are specified with custom attributes, vertex strides, varying, and vertex and fragment shaders written in AGSL.

The vertex shader defines the varyings, such as position and color, while the fragment shader can optionally define the color for the pixel, typically by using the varyings created by the vertex shader. If color is provided by the fragment shader, it is then blended with the current Paint color using the blend mode selected when drawing the mesh. Uniforms can be passed into the fragment and vertex shaders for additional flexibility.

Moteur de rendu de tampon matériel pour Canvas

Pour faciliter l'utilisation de l'API Canvas d'Android pour dessiner avec une accélération matérielle dans un HardwareBuffer, Android 14 introduit HardwareBufferRenderer. Cette API est particulièrement utile lorsque votre cas d'utilisation implique une communication avec le système compositeur via SurfaceControl pour une faible latence un dessin.