Обзор функций и API

Android 14 предлагает отличные функции и API для разработчиков. Следующие инструкции помогут вам узнать о функциях ваших приложений и начать работу с соответствующими API.

Подробный список добавленных, измененных и удаленных API можно найти в отчете о различиях API . Подробную информацию о добавленных API см. в справочнике по API Android . Для Android 14 найдите API, добавленные на уровне API 34. Чтобы узнать об областях, в которых изменения платформы могут повлиять на ваши приложения, обязательно ознакомьтесь с изменениями в поведении Android 14 для приложений, которые целевой Android 14 и для всех приложений .

Интернационализация

Языковые настройки для каждого приложения

В Android 14 языковые функции каждого приложения , которые были представлены в Android 13 (уровень API 33), расширены следующими дополнительными возможностями:

  • Автоматически генерировать localeConfig приложения . Начиная с Android Studio Giraffe Canary 7 и AGP 8.1.0-alpha07, вы можете настроить свое приложение для автоматической поддержки языковых настроек для каждого приложения . На основе ресурсов вашего проекта плагин Android Gradle создает файл LocaleConfig и добавляет ссылку на него в окончательный файл манифеста, поэтому вам больше не придется создавать или обновлять файл вручную. AGP использует ресурсы в папках res модулей вашего приложения и любых зависимостях модулей библиотеки, чтобы определить локали, которые необходимо включить в файл LocaleConfig .

  • Динамические обновления для localeConfig приложения . Используйте методы setOverrideLocaleConfig() и getOverrideLocaleConfig() в LocaleManager чтобы динамически обновлять список поддерживаемых языков вашего приложения в системных настройках устройства . Используйте эту гибкость, чтобы настроить список поддерживаемых языков для каждого региона, проводить эксперименты A/B или предоставлять обновленный список языков, если ваше приложение использует отправку на стороне сервера для локализации.

  • Видимость языка приложения для редакторов методов ввода (IME) . IME могут использовать метод getApplicationLocales() для проверки языка текущего приложения и сопоставления языка IME с этим языком.

API грамматического изменения

有 30 亿人在使用区分性别的语言,此类语言的语法类别(例如名词、动词、形容词和介词)会根据您交谈所涉及的人或物的性别而变化。传统上,许多区分性别的语言使用阳性语法性别作为默认或通用性别。

以错误的语法性别来称呼用户,例如以阳性语法性别来称呼女性,可能会对她们的表现和态度产生负面影响。相比之下,界面语言如果能正确反映用户的语法性别,就可以提高用户互动度,并提供更个性化、更自然的用户体验。

为帮助您针对区分性别的语言构建以用户为中心的界面,Android 14 引入了 Grammatical Inflection API,让您无需重构应用便能添加对语法性别的支持。

Региональные предпочтения

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.

Доступность

Нелинейное масштабирование шрифта до 200 %.

Начиная с Android 14, система поддерживает масштабирование шрифта до 200 %, предоставляя пользователям с плохим зрением дополнительные возможности доступа, соответствующие рекомендациям по доступности веб-контента (WCAG) .

Чтобы предотвратить слишком большое масштабирование больших текстовых элементов на экране, система применяет нелинейную кривую масштабирования. Эта стратегия масштабирования означает, что большой текст не масштабируется с той же скоростью, что и меньший текст. Нелинейное масштабирование шрифта помогает сохранить пропорциональную иерархию между элементами разных размеров, одновременно устраняя проблемы с линейным масштабированием текста при высоких степенях (например, обрезание текста или текст, который становится труднее читать из-за чрезвычайно больших размеров дисплея).

Протестируйте свое приложение с помощью нелинейного масштабирования шрифтов

Включите максимальный размер шрифта в настройках специальных возможностей устройства, чтобы протестировать приложение.

Если вы уже используете масштабированные пиксели (sp) для определения размера текста, то эти дополнительные параметры и улучшения масштабирования автоматически применяются к тексту в вашем приложении. Тем не менее, вам все равно следует выполнять тестирование пользовательского интерфейса с включенным максимальным размером шрифта (200%), чтобы убедиться, что ваше приложение правильно применяет размеры шрифта и может использовать шрифты большего размера без ущерба для удобства использования.

Чтобы включить размер шрифта 200%, выполните следующие действия:

  1. Откройте приложение «Настройки» и перейдите в «Доступность» > «Размер дисплея и текст» .
  2. Для параметра «Размер шрифта» нажимайте значок плюса (+), пока не будет включена настройка максимального размера шрифта, как показано на изображении, сопровождающем этот раздел.

Используйте масштабированные единицы пикселей (sp) для размеров текста.

Не забывайте всегда указывать размеры текста в единицах sp . Когда ваше приложение использует единицы sp, Android может применить предпочтительный размер текста пользователя и соответствующим образом масштабировать его.

Не используйте единицы sp для заполнения и не определяйте высоту вида, предполагая неявное заполнение: при нелинейном масштабировании шрифта размеры sp могут быть не пропорциональными, поэтому 4sp + 20sp могут не равняться 24sp.

Перевести масштабированные единицы пикселей (sp)

Используйте TypedValue.applyDimension() для преобразования единиц sp в пиксели и используйте TypedValue.deriveDimension() для преобразования пикселей в sp. Эти методы автоматически применяют соответствующую кривую нелинейного масштабирования.

Избегайте жесткого кодирования уравнений с использованием Configuration.fontScale или DisplayMetrics.scaledDensity . Поскольку масштабирование шрифта является нелинейным, поле scaledDensity больше не является точным. Поле fontScale следует использовать только в информационных целях, поскольку шрифты больше не масштабируются с помощью одного скалярного значения.

Используйте единицы sp для lineHeight

Всегда определяйте android:lineHeight используя единицы измерения sp вместо dp, чтобы высота строки масштабировалась вместе с текстом. В противном случае, если ваш текст имеет формат sp, а lineHeight — в dp или px, он не масштабируется и выглядит тесным. TextView автоматически корректирует lineHeight , чтобы сохранить заданные пропорции, но только если и textSize , и lineHeight определены в единицах sp.

Камера и медиа

Ультра HDR для изображений

标准动态范围 (SDR) 与高动态范围 (HDR) 图片质量的示意图。

Android 14 增加了对高动态范围 (HDR) 图片的支持,此类图片可在拍照时保留来自传感器的更多信息,从而实现鲜艳的色彩和更高的对比度。Android 采用 Ultra HDR 格式,这种格式可完全向后兼容 JPEG 图片,允许应用与 HDR 图片无缝互操作,从而根据需要以标准动态范围 (SDR) 显示图片。

当您的应用为其 Activity 窗口选择使用 HDR 界面(通过清单条目或在运行时通过调用 Window.setColorMode())时,框架会自动在 HDR 界面中呈现这些图片。您还可以在支持的设备上拍摄压缩的 Ultra HDR 静态图片。从传感器中恢复的颜色越多,博文中的编辑效果就越灵活。与 Ultra HDR 图片关联的 Gainmap 可用于使用 OpenGL 或 Vulkan 渲染这些图片。

Масштабирование, фокусировка, постпросмотр и многое другое в расширениях камеры.

В Android 14 обновляются и совершенствуются расширения камеры , что позволяет приложениям обрабатывать больше времени, что позволяет улучшать изображения с помощью алгоритмов с интенсивными вычислениями, таких как фотография при слабом освещении, на поддерживаемых устройствах. Эти функции дают пользователям еще больше возможностей при использовании дополнительных возможностей камеры. Примеры таких улучшений включают в себя:

  • Динамическая оценка задержки обработки кадров обеспечивает гораздо более точную оценку задержки захвата фотографий на основе текущей сцены и условий окружающей среды. Вызовите CameraExtensionSession.getRealtimeStillCaptureLatency() чтобы получить объект StillCaptureLatency , имеющий два метода оценки задержки. Метод getCaptureLatency() возвращает расчетную задержку между onCaptureStarted и onCaptureProcessStarted() , а метод getProcessingLatency() возвращает расчетную задержку между onCaptureProcessStarted() и доступным окончательным обработанным кадром.
  • Поддержка обратных вызовов процесса захвата, чтобы приложения могли отображать текущий ход длительных операций обработки неподвижного захвата. Вы можете проверить, доступна ли эта функция, с помощью CameraExtensionCharacteristics.isCaptureProcessProgressAvailable , и если да, вы реализуете обратный вызов onCaptureProcessProgressed() , в котором в качестве параметра передается прогресс (от 0 до 100).
  • Метаданные, специфичные для расширения, такие как CaptureRequest.EXTENSION_STRENGTH для набора величины эффекта расширения, например степени размытия фона с помощью EXTENSION_BOKEH .

  • Функция Postview для захвата фотографий в расширениях камеры, которая обеспечивает менее обработанное изображение быстрее, чем окончательное изображение. Если расширение имеет увеличенную задержку обработки, изображение после просмотра может быть предоставлено в качестве заполнителя для улучшения UX и позже отключено для окончательного изображения. Вы можете проверить, доступна ли эта функция, с помощью CameraExtensionCharacteristics.isPostviewAvailable . Затем вы можете передать OutputConfiguration в ExtensionSessionConfiguration.setPostviewOutputConfiguration .

  • Поддержка SurfaceView обеспечивающая более оптимизированный и энергоэффективный путь предварительного просмотра.

  • Поддержка касания для фокусировки и масштабирования во время использования расширения.

Встроенный зум

When REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE in CameraCharacteristics contains SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, your app can use advanced sensor capabilities to give a cropped RAW stream the same pixels as the full field of view by using a CaptureRequest with a RAW target that has stream use case set to CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW. By implementing the request override controls, the updated camera gives users zoom control even before other camera controls are ready.

USB-аудио без потерь

В Android 14 появилась поддержка аудиоформатов без потерь для аудиофильского уровня через проводные USB-гарнитуры. Вы можете запросить у USB-устройства предпочтительные атрибуты микшера, зарегистрировать прослушиватель изменений в предпочтительных атрибутах микшера и настроить атрибуты микшера с помощью класса AudioMixerAttributes . Этот класс представляет формат, такой как маска канала, частота дискретизации и поведение аудиомикшера. Класс позволяет отправлять аудио напрямую , без микширования, регулировки громкости или обработки эффектов.

Производительность и инструменты разработчика

Менеджер учетных данных

В Android 14 добавлен диспетчер учетных данных в качестве API платформы с дополнительной поддержкой устройств Android 4.4 (уровень API 19) через библиотеку Jetpack с использованием сервисов Google Play. Диспетчер учетных данных призван упростить вход в систему для пользователей с помощью API, которые извлекают и сохраняют учетные данные с помощью поставщиков учетных данных, настраиваемых пользователем. Диспетчер учетных данных поддерживает несколько методов входа, включая имя пользователя и пароль, ключи доступа и решения для федеративного входа (например, вход с помощью Google) в одном API.

Ключи доступа дают множество преимуществ. Например, ключи доступа созданы на основе отраслевых стандартов , могут работать в различных операционных системах и экосистемах браузеров и могут использоваться как с веб-сайтами, так и с приложениями.

Дополнительные сведения см. в документации по диспетчеру учетных данных и ключам доступа, а также в записи блога о диспетчере учетных данных и ключах доступа .

Здоровье Connect

Health Connect 是设备端用户健康与健身数据的存储区。它 让用户可以在喜爱的应用之间共享数据 控制他们要与这些应用分享哪些数据

在搭载 Android 14 之前版本的 Android 设备上,Health Connect 会 可在 Google Play 商店中以应用的形式下载。从 Android 14 开始,Health Connect 将成为 Android 平台的一部分,并通过 Google Play 系统更新接收更新,而无需单独下载。这样,健康 Connect 可能会经常更新,并且您的应用可以依赖于 Health Connect 在搭载 Android 14 或更高版本的设备上可用。用户可以访问“健康”应用 通过设备中的“设置”连接,以及集成到 与系统设置有关

用户无需单独的 在搭载 Android 14 或更高版本的设备上下载应用。
用户可以通过系统设置控制哪些应用可以访问其健康与健身数据。

Health Connect 包含 Android 14 中的多项新功能,例如锻炼 路线,让用户能够分享锻炼路线,并且路线直观 。路线定义为在一定时间范围内保存的位置列表,您的应用可以将路线插入锻炼时段,将它们关联起来。为确保用户可以完全控制这些敏感数据, 用户必须允许与其他应用分享具体路线。

有关详情,请参阅 Health Connection 文档以及关于 Android Health 的新变化

Обновления OpenJDK 17

Android 14 continues the work of refreshing Android's core libraries to align with the features in the latest OpenJDK LTS releases, including both library updates and Java 17 language support for app and platform developers.

The following features and improvements are included:

  • Updated approximately 300 java.base classes to Java 17 support.
  • Text Blocks, which introduce multi-line string literals to the Java programming language.
  • Pattern Matching for instanceof, which allows an object to be treated as having a specific type in an instanceof without any additional variables.
  • Sealed classes, which allow you restrict which classes and interfaces can extend or implement them.

Thanks to Google Play system updates (Project Mainline), over 600 million devices are enabled to receive the latest Android Runtime (ART) updates that include these changes. This is part of our commitment to give apps a more consistent, secure environment across devices, and to deliver new features and capabilities to users independent of platform releases.

Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Улучшения для магазинов приложений

Android 14 引入了多个 PackageInstaller API,可帮助应用商店改善其用户体验。

下载之前请求批准安装

安装或更新应用可能需要用户批准。 例如,当使用 REQUEST_INSTALL_PACKAGES 权限的安装程序尝试安装新应用时。在之前的 Android 版本中,应用商店只有在 APK 写入安装会话且该会话已提交之后才能请求用户批准。

从 Android 14 开始,requestUserPreapproval() 方法可让安装程序在提交安装会话之前请求用户批准。此项改进可让应用商店将任何 APK 的下载操作推迟到用户批准安装之后。此外,用户批准安装后,应用商店可以在后台下载并安装应用,而不会干扰用户。

承担未来更新的责任

通过 setRequestUpdateOwnership() 方法,安装程序可以告知系统它打算负责未来安装的应用更新。此功能可实现更新所有权强制执行,即只有更新所有者才能为应用安装自动更新。更新所有权强制执行有助于确保用户仅从预期的应用商店接收更新。

任何其他安装程序(包括使用 INSTALL_PACKAGES 权限的安装程序)都必须获得用户的明确批准,才能安装更新。如果用户决定继续从其他来源进行更新,更新所有权将会丢失。

在干扰较少的时段更新应用

应用商店通常希望避免更新正在使用的应用,因为这会导致应用正在运行的进程被终止,而这可能会中断用户正在执行的操作。

从 Android 14 开始,InstallConstraints API 让安装程序可以确保其应用更新在适当的时机进行。例如,应用商店可以调用 commitSessionAfterInstallConstraintsAreMet() 方法来确保仅在用户不再与相关应用互动时进行更新。

无缝安装可选拆分

借助拆分 APK,应用的功能可以通过单独的 APK 文件提供,而不是以单体式 APK 的形式提供。借助拆分 APK,应用商店可以优化不同应用组件的提供。例如,应用商店可能会根据目标设备的属性进行优化。自从在 API 级别 22 中引入以来,PackageInstaller API 一直支持拆分。

在 Android 14 中,setDontKillApp() 方法可让安装程序指明在安装新的分块时不应终止应用正在运行的进程。应用商店可以使用此功能,在用户使用应用时无缝安装应用的新功能。

Пакеты метаданных приложения

Начиная с Android 14, установщик пакетов Android позволяет указать метаданные приложения , например правила безопасности данных, для включения на страницы магазина приложений, например Google Play.

Обнаруживайте, когда пользователи делают снимки экрана устройства

Чтобы создать более стандартизированный процесс обнаружения снимков экрана, в Android 14 представлен API обнаружения снимков экрана, сохраняющий конфиденциальность. Этот API позволяет приложениям регистрировать обратные вызовы для каждого действия. Эти обратные вызовы вызываются, и пользователь уведомляется, когда он делает снимок экрана, когда это действие видно.

Пользовательский опыт

Дополнительные действия в Sharesheet и улучшенный рейтинг

В Android 14 обновляется общая таблица системы для поддержки настраиваемых действий приложения и более информативных результатов предварительного просмотра для пользователей.

Добавить специальные действия

В Android 14 ваше приложение может добавлять специальные действия в общую таблицу системы, которую оно вызывает.

Скриншот настраиваемых действий на общем листе.

Улучшить рейтинг целей Direct Share

Android 14 использует больше сигналов от приложений для определения рейтинга целей прямого обмена и предоставления более полезных результатов для пользователя. Чтобы обеспечить наиболее полезный сигнал для ранжирования, следуйте инструкциям по улучшению рейтинга ваших целей Direct Share . Коммуникационные приложения также могут сообщать об использовании ярлыков для исходящих и входящих сообщений.

Строка Direct Share в таблице общего доступа, как показано цифрой 1.

Поддержка встроенных и пользовательских анимаций для Predictive Back.

Видео: прогнозирующая анимация спины

В Android 13 появилась предиктивная анимация возвращения домой, доступная для разработчиков. При использовании в поддерживаемом приложении с включенной опцией разработчика при смахивании назад отображается анимация, указывающая, что жест возврата позволяет выйти из приложения обратно на главный экран.

Android 14 включает в себя множество улучшений и новые рекомендации по функции Predictive Back:

В этой предварительной версии Android 14 все функции Predictive Back остаются за пределами возможностей разработчика. См. руководство для разработчиков, чтобы вернуть приложение на интеллектуальный режим , а также руководство для разработчиков по созданию пользовательских переходов внутри приложения .

Переопределения для каждого приложения производителя устройства с большим экраном

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.

Переопределения для пользователей с большим экраном для каждого приложения

Переопределения для каждого приложения меняют поведение приложений на устройствах с большим экраном. Например, переопределение производителя устройства OVERRIDE_MIN_ASPECT_RATIO_LARGE устанавливает соотношение сторон приложения на 16:9 независимо от конфигурации приложения.

Android 14 QPR1 позволяет пользователям применять переопределения для каждого приложения с помощью нового меню настроек на устройствах с большим экраном.

Совместное использование экрана приложения

应用屏幕共享功能让用户能够在录制屏幕内容期间共享应用窗口,而非整个设备屏幕。

使用应用屏幕共享时,状态栏、导航栏、通知和其他系统界面元素会从共享显示屏中排除。系统只会分享所选应用的内容。

应用屏幕共享可让用户运行多个应用,但仅限单个应用共享内容,从而提高效率和隐私性。

Умный ответ на базе LLM в Gboard на Pixel 8 Pro

On Pixel 8 Pro devices with the December Feature Drop, developers can try out higher-quality smart replies in Gboard powered by on-device Large Language Models (LLMs) running on Google Tensor.

This feature is available as a limited preview for US English in WhatsApp, Line, and KakaoTalk. It requires using a Pixel 8 Pro device with Gboard as your keyboard.

To try it out, first enable the feature in Settings > Developer Options > AiCore Settings > Enable Aicore Persistent.

Next, open a conversation in a supported app to see LLM-powered Smart Reply in Gboard's suggestion strip in response to incoming messages.

Gboard utilizes on-device LLMs to provide higher-quality smart replies.

Графика

Пути доступны для запроса и интерполяции.

API Path Android — это мощный и гибкий механизм для создания и рендеринга векторной графики с возможностью обводки или заливки пути, построения пути из сегментов линий, квадратичных или кубических кривых, выполнения логических операций для получения еще более сложных фигур или все из них одновременно. Одним из ограничений является возможность узнать, что на самом деле находится в объекте Path; внутренности объекта непрозрачны для вызывающих сторон после создания.

Чтобы создать Path , вы вызываете такие методы, как moveTo() , lineTo() и cubicTo() , чтобы добавить сегменты пути. Но у этого пути не было возможности узнать, что представляют собой сегменты, поэтому вы должны сохранить эту информацию во время создания.

Начиная с Android 14, вы можете запрашивать пути, чтобы узнать, что внутри них. Во-первых, вам нужно получить объект PathIterator с помощью API Path.getPathIterator :

Котлин

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

Ява

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

Затем вы можете вызвать PathIterator для перебора сегментов один за другим, извлекая все необходимые данные для каждого сегмента. В этом примере используются объекты PathIterator.Segment , которые упаковывают данные за вас:

Котлин

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

Ява

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

PathIterator также имеет версию next() без выделения памяти, в которую вы можете передать буфер для хранения данных точек.

Одним из важных вариантов использования запроса данных Path является интерполяция. Например, вы можете захотеть анимировать (или трансформировать ) между двумя разными путями. Чтобы еще больше упростить этот вариант использования, Android 14 также включает метод interpolate() в Path . Предполагая, что два пути имеют одинаковую внутреннюю структуру, метод interpolate() создает новый Path с этим интерполированным результатом. В этом примере возвращается путь, форма которого находится на полпути (линейная интерполяция .5) между path otherPath :

Котлин

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

Ява

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

Библиотека графических путей Jetpack поддерживает аналогичные API и для более ранних версий Android.

Пользовательские сетки с вершинными и фрагментными шейдерами

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.

Аппаратный рендеринг буфера для Canvas

To assist in using Android's Canvas API to draw with hardware acceleration into a HardwareBuffer, Android 14 introduces HardwareBufferRenderer. This API is particularly useful when your use case involves communication with the system compositor through SurfaceControl for low-latency drawing.