В Android 14 представлены отличные функции и API для разработчиков. Информация ниже поможет вам узнать о функциях ваших приложений и начать работу с соответствующими API.
Подробный список добавленных, измененных и удаленных API см. в отчете о различиях в API . Подробнее о добавленных API см. в справочнике по API Android . Для Android 14 найдите API, добавленные на уровне API 34. Чтобы узнать об областях, где изменения платформы могут повлиять на ваши приложения, ознакомьтесь с изменениями в поведении приложений, ориентированных на 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:使用LocaleManager方法中的setOverrideLocaleConfig()和getOverrideLocaleConfig()可以在设备的系统设置中动态更新应用的受支持语言列表。有了这种灵活性,您可以按区域自定义支持的语言列表、运行 A/B 实验,或者如果您的应用通过服务器端推送进行本地化,则可以提供更新后的语言区域列表。输入法 (IME) 的应用语言可见性:IME 可以利用
getApplicationLocales()方法查看当前应用的语言,并将 IME 语言与该语言进行匹配。
API грамматического склонения
3 миллиарда человек говорят на гендерных языках : языках, в которых грамматические категории, такие как существительные, глаголы, прилагательные и предлоги, изменяются в зависимости от пола людей и предметов, с которыми вы разговариваете или о которых вы говорите. Традиционно во многих гендерных языках мужской грамматический род используется в качестве родового или общего рода по умолчанию.
Обращение к пользователям неправильного грамматического рода, например обращение к женщинам мужского грамматического рода, может негативно повлиять на их работу и отношение. Напротив, пользовательский интерфейс с языком, который правильно отражает грамматический пол пользователя, может улучшить взаимодействие с пользователем и обеспечить более персонализированный и естественный пользовательский интерфейс.
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.
Региональные предпочтения
用户可通过地区偏好设置对温度单位、一周的第一天和编号系统进行个性化设置。居住在美国的欧洲用户可能更希望使用摄氏度,而不是华氏度,并且希望应用将星期一视为一周的开始,而不是像美国那样默认从星期日开始。
新 Android 设置菜单包含这些偏好设置,使用户能够在一个位置集中发现这些应用更改偏好设置。这些偏好设置在备份和恢复设备后也会保持不变。多个 API 和 intent(例如 getTemperatureUnit 和 getFirstDayOfWeek)会为您的应用授予读取权限来访问用户偏好设置,因此您的应用可以调整其显示信息的方式。您还可以在 ACTION_LOCALE_CHANGED 上注册 BroadcastReceiver,以便在地区偏好设置发生更改时处理语言区域配置更改。
如需找到这些设置,请打开“设置”应用,然后依次前往系统 > 语言和输入法 > 地区偏好设置。
Доступность
Нелинейное масштабирование шрифта до 200%
Начиная с Android 14, система поддерживает масштабирование шрифтов до 200%, предоставляя пользователям дополнительные возможности доступа.
Чтобы предотвратить чрезмерное масштабирование крупных текстовых элементов на экране, система применяет нелинейную кривую масштабирования. Эта стратегия масштабирования означает, что крупный текст масштабируется не с той же скоростью, что и мелкий. Нелинейное масштабирование шрифтов помогает сохранить пропорциональную иерархию между элементами разных размеров, одновременно смягчая проблемы, возникающие при масштабировании линейного текста с высокой степенью масштабирования (например, обрезание текста или усложнение чтения текста из-за слишком большого размера экрана).
Протестируйте свое приложение с нелинейным масштабированием шрифтов

Если вы уже используете единицы измерения масштаба текста в пикселях (sp), то эти дополнительные параметры и улучшения масштабирования будут автоматически применены к тексту в вашем приложении. Однако вам всё равно следует провести тестирование пользовательского интерфейса с максимальным размером шрифта (200%), чтобы убедиться, что ваше приложение корректно применяет размеры шрифтов и может работать с более крупными шрифтами без ущерба для удобства использования.
Чтобы включить размер шрифта 200%, выполните следующие действия:
- Откройте приложение «Настройки» и перейдите в раздел «Специальные возможности» > «Размер дисплея и текст» .
- Для параметра «Размер шрифта» нажимайте значок плюс (+), пока не будет включена настройка максимального размера шрифта, как показано на изображении в этом разделе.
Используйте единицы измерения масштабированных пикселей (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.
Камера и медиа
Ultra 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 图片作为占位符以提升用户体验,并在稍后改用最终图片。您可以使用
CameraExtensionCharacteristics.isPostviewAvailable检查此功能是否可用。然后,您可以将OutputConfiguration传递给ExtensionSessionConfiguration.setPostviewOutputConfiguration。支持
SurfaceView,可实现更优化且能效更高的预览渲染路径。支持在使用扩展程序时点按对焦和缩放。
Зум в датчике
Если REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE в CameraCharacteristics содержит SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW , ваше приложение может использовать расширенные возможности датчика, чтобы предоставить обрезанному потоку RAW те же пиксели, что и полное поле зрения, используя CaptureRequest с целевым объектом RAW, для которого установлен вариант использования потока CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW _CASES_CROPPED_RAW . Благодаря реализации элементов управления переопределением запроса обновленная камера дает пользователям возможность управлять масштабированием даже до того, как будут готовы другие элементы управления камерой.
USB-аудио без потерь
В Android 14 появилась поддержка аудиоформатов без потерь для аудиофильского уровня через проводные USB-гарнитуры. Вы можете запросить у USB-устройства предпочтительные атрибуты микшера, зарегистрировать прослушиватель изменений в предпочтительных атрибутах микшера и настроить атрибуты микшера с помощью класса AudioMixerAttributes . Этот класс представляет формат, такой как маска канала, частота дискретизации и поведение аудиомикшера. Класс позволяет отправлять аудио напрямую , без микширования, регулировки громкости или обработки эффектов.
Производительность и инструменты разработчика
Менеджер по учетным данным
В Android 14 добавлен диспетчер учетных данных в качестве API платформы с дополнительной поддержкой устройств Android 4.4 (уровень API 19) через библиотеку Jetpack с использованием сервисов Google Play. Диспетчер учетных данных призван упростить вход в систему для пользователей с помощью API, которые извлекают и сохраняют учетные данные с помощью поставщиков учетных данных, настраиваемых пользователем. Диспетчер учетных данных поддерживает несколько методов входа, включая имя пользователя и пароль, ключи доступа и решения для федеративного входа (например, вход с помощью Google) в одном API.
Ключи доступа дают множество преимуществ. Например, ключи доступа созданы на основе отраслевых стандартов , могут работать в различных операционных системах и экосистемах браузеров и могут использоваться как с веб-сайтами, так и с приложениями.
Дополнительные сведения см. в документации по диспетчеру учетных данных и ключам доступа, а также в записи блога о диспетчере учетных данных и ключах доступа .
Health Connect
Health Connect 是用户健康与健身数据的设备端仓库。借助该功能,用户可以在一个位置控制要与这些应用共享哪些数据,并在自己喜爱的应用之间共享数据。
在搭载 Android 14 之前的 Android 版本的设备上,Health Connect 可作为应用从 Google Play 商店下载。从 Android 14 开始,Health Connect 将成为 Android 平台的一部分,并通过 Google Play 系统更新接收更新,而无需单独下载。这样一来,Health Connect 就可以频繁更新,您的应用可以依赖于搭载 Android 14 或更高版本的设备上提供的 Health Connect。用户可以通过设备的“设置”访问 Health Connect,隐私控制功能集成到系统设置中。
Health Connect 在 Android 14 中包含多项新功能,例如锻炼路线,可让用户分享可在地图上直观呈现的锻炼路线。路线定义为在一定时间范围内保存的位置列表,您的应用可以将路线插入锻炼时段,将它们关联起来。为确保用户能够完全控制此类敏感数据,用户必须允许与其他应用共享单个路线。
如需了解详情,请参阅 Health Connect 文档以及有关 Android Health 中的新功能的博文。
Обновления 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 及/或其关联公司的商标或注册商标。
Улучшения для магазинов приложений
В Android 14 представлено несколько API-интерфейсов PackageInstaller , которые позволяют магазинам приложений улучшить взаимодействие с пользователем.
Перед загрузкой запросите разрешение на установку
Для установки или обновления приложения может потребоваться одобрение пользователя . Например, когда установщик, использующий разрешение REQUEST_INSTALL_PACKAGES пытается установить новое приложение. В предыдущих версиях Android магазины приложений могли запрашивать одобрение пользователя только после того, как APK-файлы были записаны в сеанс установки и сеанс был зафиксирован .
Начиная с Android 14, метод requestUserPreapproval() позволяет установщикам запрашивать одобрение пользователя перед завершением сеанса установки. Это улучшение позволяет магазину приложений отложить загрузку любых APK-файлов до тех пор, пока установка не будет одобрена пользователем. Более того, как только пользователь одобрил установку, магазин приложений сможет загрузить и установить приложение в фоновом режиме, не отвлекая пользователя.
Взять на себя ответственность за будущие обновления
Метод setRequestUpdateOwnership() позволяет установщику указать системе, что он намерен нести ответственность за будущие обновления устанавливаемого приложения. Эта возможность обеспечивает принудительное применение прав собственности на обновления. Это означает, что только владельцу обновления разрешено устанавливать автоматические обновления для приложения. Обеспечение прав собственности на обновления помогает гарантировать, что пользователи получают обновления только из ожидаемого магазина приложений.
Любой другой установщик, в том числе использующий разрешение INSTALL_PACKAGES , должен получить явное одобрение пользователя для установки обновления. Если пользователь решает продолжить обновление из другого источника, право собственности на обновление теряется.
Обновляйте приложения в удобное для вас время
Магазины приложений обычно стараются избегать обновления активно используемого приложения, поскольку это приводит к остановке запущенных процессов приложения, что потенциально может прерывать действия пользователя.
Начиная с Android 14, API InstallConstraints дает установщикам возможность гарантировать, что обновления их приложений будут выполняться в подходящий момент. Например, магазин приложений может вызвать метод commitSessionAfterInstallConstraintsAreMet() чтобы убедиться, что обновление фиксируется только тогда, когда пользователь больше не взаимодействует с рассматриваемым приложением.
Простая установка дополнительных сплит-систем
Благодаря разделенным APK-файлам функции приложения могут быть представлены в отдельных APK-файлах, а не в виде монолитного APK. Разделенные APK-файлы позволяют магазинам приложений оптимизировать доставку различных компонентов приложения. Например, магазины приложений могут оптимизироваться на основе свойств целевого устройства. API PackageInstaller поддерживает разделение с момента его появления на уровне API 22.
В Android 14 метод setDontKillApp() позволяет установщику указать, что запущенные процессы приложения не должны завершаться при установке новых разбиений. Магазины приложений могут использовать эту функцию для беспрепятственной установки новых функций приложения, пока пользователь его использует.
Пакеты метаданных приложения
从 Android 14 开始,Android 软件包安装程序可让您指定应用元数据(例如数据安全做法),以在 Google Play 等应用商店页面上架。
Определите, когда пользователи делают снимки экрана устройства
To create a more standardized experience for detecting screenshots, Android 14 introduces a privacy-preserving screenshot detection API. This API lets apps register callbacks on a per-activity basis. These callbacks are invoked, and the user is notified, when the user takes a screenshot while that activity is visible.
Пользовательский опыт
Пользовательские действия в Sharesheet и улучшенный рейтинг
Android 14 更新了系统 Sharesheet,以便为用户提供自定义应用操作和信息更丰富的预览结果。
添加自定义操作
对于 Android 14,您的应用可以向其调用的系统 Sharesheet 添加自定义操作。
提高直接共享目标的排名
Android 14 根据来自应用的更多信号来确定直接共享目标的排名,以便为用户提供更实用的结果。为了提供最实用的排名信号,请遵循提高直接共享目标排名的准则。通讯应用还可以报告出站和入站消息的快捷方式使用情况。
Поддержка встроенных и пользовательских анимаций для Predictive Back
Android 13 在开发者选项背后引入了预测性“返回主屏幕”动画。在已启用开发者选项的受支持应用中使用时,滑回手势会显示动画,表明返回手势会使应用退回到主屏幕。
Android 14 包含针对“预测性返回”的多项改进和新指南:
- 您可设置
android:enableOnBackInvokedCallback=true,以便为每个 activity 选择启用预测性返回系统动画,而不是为整个应用选择启用。 - 我们添加了新的系统动画,以配合 Android 13 中的“返回主屏幕”动画。新的系统动画是跨 activity 和跨任务的,您可在迁移到预测性返回后自动获得该动画。
- 我们为底部动作条、侧边动作条和搜索添加了新的 Material 组件动画。
- 我们制作了有关如何创建自定义应用内动画和转换的设计指南。
- 我们添加了许多新 API 来支持自定义的应用内转换动画:
在此 Android 14 预览版中,所有预测性返回功能都是位于开发者选项背后。请参阅与将您的应用迁移到预测性返回有关的开发者指南,以及与创建自定义应用内转换有关的开发者指南。
Переопределения для каждого приложения производителем устройства с большим экраном
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.
Переопределения для каждого приложения на большом экране
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.
Совместное использование экрана приложения
Совместное использование экрана приложения позволяет пользователям делиться окном приложения, а не всем экраном устройства во время записи содержимого экрана.
При совместном использовании экрана приложения строка состояния, панель навигации, уведомления и другие элементы пользовательского интерфейса системы исключаются из общего дисплея. Доступен только контент выбранного приложения.
Совместное использование экрана приложений повышает производительность и конфиденциальность, позволяя пользователям запускать несколько приложений, но ограничивая общий доступ к контенту одним приложением.
Умный ответ на базе LLM в Gboard на Pixel 8 Pro
在搭载 12 月功能分块的 Pixel 8 Pro 设备上,开发者可以在 Gboard 中试用质量更高的智能回复,这些回复由在 Google Tensor 上运行的设备端大语言模型 (LLM) 提供支持。
此功能目前仅在 WhatsApp、Line 和 KakaoTalk 中以美式英语的形式提供给用户进行小范围测试。此功能需要使用 Pixel 8 Pro 设备,并将 Gboard 用作键盘。
如需试用此功能,请先依次前往设置 > 开发者选项 > AiCore 设置 > 启用 Aicore 持久性,启用该功能。
接下来,在受支持的应用中打开对话,即可在 Gboard 的建议栏中看到依托 LLM 的智能回复,以便回复收到的消息。
Графика
Пути можно запрашивать и интерполировать.
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 长期以来一直支持使用自定义着色绘制三角网格,但输入网格格式仅限于一些预定义的属性组合。Android 14 增加了对自定义网格的支持,可将其定义为三角形或三角形条,并且可以选择是否编入索引。这些网格是使用自定义属性、顶点步长、可变以及使用 AGSL 编写的顶点着色器和片段着色器指定的。
顶点着色器定义了位置和颜色等变量,而片段着色器可以选择为像素定义颜色,通常是使用顶点着色器创建的变量。如果片段着色器提供颜色,则系统会使用绘制网格时选择的混合模式将其与当前 Paint 颜色混合。Uniform 可以传递到片段着色器和顶点着色器,以提高灵活性。
Аппаратный буферный рендерер для Canvas
协助使用 Android 的 Canvas API 通过
硬件加速至 HardwareBuffer、Android 14
引入了 HardwareBufferRenderer。如果您的用例涉及通过 SurfaceControl 与系统合成器通信以实现低延迟绘制,此 API 特别有用。