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

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

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

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

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

Android 14 expands on the per-app language features that were introduced in Android 13 (API level 33) with these additional capabilities:

  • Automatically generate an app's localeConfig: Starting with Android Studio Giraffe Canary 7 and AGP 8.1.0-alpha07, you can configure your app to support per-app language preferences automatically. Based on your project resources, the Android Gradle plugin generates the LocaleConfig file and adds a reference to it in the final manifest file, so you no longer have to create or update the file manually. AGP uses the resources in the res folders of your app modules and any library module dependencies to determine the locales to include in the LocaleConfig file.

  • Dynamic updates for an app's localeConfig: Use the setOverrideLocaleConfig() and getOverrideLocaleConfig() methods in LocaleManager to dynamically update your app's list of supported languages in the device's system settings. Use this flexibility to customize the list of supported languages per region, run A/B experiments, or provide an updated list of locales if your app utilizes server-side pushes for localization.

  • App language visibility for input method editors (IMEs): IMEs can utilize the getApplicationLocales() method to check the language of the current app and match the IME language to that language.

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

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

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

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

,

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

,

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

,

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

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

Региональные настройки позволяют пользователям персонализировать единицы измерения температуры, первый день недели и системы нумерации. Европеец, живущий в Соединенных Штатах, может предпочесть, чтобы единицы температуры были в градусах Цельсия, а не в Фаренгейте, и чтобы приложения считали понедельник началом недели, а не воскресенье по умолчанию в США.

Новые меню настроек Android для этих настроек предоставляют пользователям доступное и централизованное место для изменения настроек приложений. Эти настройки также сохраняются при резервном копировании и восстановлении. Некоторые API и намерения, такие как getTemperatureUnit и getFirstDayOfWeek , предоставляют вашему приложению доступ для чтения к пользовательским настройкам, поэтому ваше приложение может настроить способ отображения информации. Вы также можете зарегистрировать BroadcastReceiver в ACTION_LOCALE_CHANGED для обработки изменений конфигурации локали при изменении региональных предпочтений.

Чтобы найти эти настройки, откройте приложение «Настройки» и выберите «Система» > «Языки и ввод» > «Региональные настройки» .

Экран региональных настроек в настройках системы Android.
Параметры температуры для региональных предпочтений в настройках системы Android.

Доступность

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

Начиная с Android 14, система поддерживает масштабирование шрифтов до 200%, предоставляя пользователям дополнительные возможности доступа.

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

Протестируйте свое приложение с нелинейным масштабированием шрифтов

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

Если вы уже используете единицы измерения масштаба текста в пикселях (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.

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

Ultra HDR для изображений

An illustration of Standard Dynamic Range (SDR) versus High Dynamic Range (HDR) image quality.

Android 14 adds support for High Dynamic Range (HDR) images that retain more of the information from the sensor when taking a photo, which enables vibrant colors and greater contrast. Android uses the Ultra HDR format, which is fully backward compatible with JPEG images, allowing apps to seamlessly interoperate with HDR images, displaying them in Standard Dynamic Range (SDR) as needed.

Rendering these images in the UI in HDR is done automatically by the framework when your app opts in to using HDR UI for its Activity Window, either through a manifest entry or at runtime by calling Window.setColorMode(). You can also capture compressed Ultra HDR still images on supported devices. With more colors recovered from the sensor, editing in post can be more flexible. The Gainmap associated with Ultra HDR images can be used to render them using OpenGL or Vulkan.

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

Android 14 upgrades and improves camera extensions, allowing apps to handle longer processing times, which enables improved images using compute-intensive algorithms like low-light photography on supported devices. These features give users an even more robust experience when using camera extension capabilities. Examples of these improvements include:

Зум в датчике

Если 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 до Android 14 Health Connect можно загрузить в виде приложения в магазине Google Play. Начиная с Android 14, Health Connect является частью платформы и получает обновления через обновления системы Google Play, не требуя отдельной загрузки. Благодаря этому Health Connect может часто обновляться, и ваши приложения могут рассчитывать на то, что Health Connect будет доступен на устройствах под управлением Android 14 или более поздней версии. Пользователи могут получить доступ к Health Connect из настроек своего устройства, а элементы управления конфиденциальностью интегрированы в настройки системы.

Пользователи могут начать использовать Health Connect без отдельной загрузки приложения на устройствах под управлением 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 представлено несколько 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() позволяет установщику указать, что запущенные процессы приложения не должны завершаться при установке новых разбиений. Магазины приложений могут использовать эту функцию для беспрепятственной установки новых функций приложения, пока пользователь его использует.

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

Starting in Android 14, the Android package installer lets you specify app metadata, such as data safety practices, to include on app store pages such as Google Play.

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

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

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

Пользовательские действия в Sharesheet и улучшенный рейтинг

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

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

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

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

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

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

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

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

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.

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

Переопределения для каждого приложения позволяют производителям устройств изменять поведение приложений на устройствах с большим экраном. Например, переопределение FORCE_RESIZE_APP предписывает системе изменить размер приложения в соответствии с размерами дисплея (избегая режима совместимости размеров), даже если в манифесте приложения установлено resizeableActivity="false" .

Переопределения предназначены для улучшения взаимодействия с пользователем на больших экранах.

Новые свойства манифеста позволяют отключить некоторые переопределения производителя устройства для вашего приложения.

Переопределения для каждого приложения на большом экране

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

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

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

Совместное использование экрана приложения позволяет пользователям делиться окном приложения, а не всем экраном устройства во время записи содержимого экрана.

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

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

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

На устройствах Pixel 8 Pro с декабрьским выпуском функций разработчики могут опробовать более качественные интеллектуальные ответы в Gboard на основе встроенных в устройство моделей больших языков (LLM), работающих на Google Tensor.

Эта функция доступна в виде ограниченной предварительной версии для американского английского языка в WhatsApp, Line и KakaoTalk. Для этого необходимо использовать устройство Pixel 8 Pro с Gboard в качестве клавиатуры.

Чтобы опробовать эту функцию, сначала включите эту функцию в «Настройки» > «Параметры разработчика» > «Настройки AiCore» > «Включить Aicore Persistent» .

Затем откройте беседу в поддерживаемом приложении, чтобы увидеть интеллектуальный ответ на базе LLM в полосе предложений Gboard в ответ на входящие сообщения.

Gboard использует LLM на устройстве для предоставления более качественных интеллектуальных ответов.

Графика

Пути можно запрашивать и интерполировать.

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.

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

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

Вершинный шейдер определяет такие вариации, как положение и цвет, тогда как фрагментный шейдер может дополнительно определять цвет пикселя, обычно используя вариации, созданные вершинным шейдером. Если цвет предоставляется фрагментным шейдером, он затем смешивается с текущим цветом Paint используя режим наложения , выбранный при рисовании сетки . Униформы можно передавать во фрагментные и вершинные шейдеры для дополнительной гибкости.

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

Чтобы помочь в использовании Android Canvas API для рисования с аппаратным ускорением в HardwareBuffer , в Android 14 представлен HardwareBufferRenderer . Этот API особенно полезен, когда ваш вариант использования предполагает связь с системным наборщиком через SurfaceControl для рисования с малой задержкой.