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

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

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

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

Тематические иконки приложений

Пользователь выбирает тематические значки приложений
Включение тематических значков приложений на Android 13

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

Для поддержки этой функции ваше приложение должно предоставлять как адаптивный, так и монохромный значок приложения, а также указывать на монохромный значок приложения из элемента <adaptive-icon> в манифесте. Если пользователь включил тематические значки приложений (то есть включил переключатель «Темные значки» в системных настройках), и лаунчер поддерживает эту функцию, система использует цвет выбранных пользователем обоев и темы для определения оттенка, который затем применяется к монохромному значку приложения.

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

  • Если пользователь не включил тематические значки приложений
  • Если ваше приложение не имеет монохромного значка
  • Если лаунчер не поддерживает тематические значки приложений

Более подробную информацию и инструкции см. в разделе Адаптивные значки .

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

Языки приложений в системных настройках

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

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

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

  • Дополнительные API : эти общедоступные API, такие как методы setApplicationLocales() и getApplicationLocales() в LocaleManager , позволяют приложениям устанавливать язык, отличный от системного языка, во время выполнения.

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

    Для обратной совместимости с предыдущими версиями Android аналогичные API также доступны в AndroidX. Мы рекомендуем использовать API, добавленные в Appcompat 1.6.0-beta01 или выше.

Приложения, не поддерживающие несколько языков, не затронуты этими изменениями.

Улучшенная поддержка текста и языка

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

Более быстрая расстановка переносов

Расстановка переносов упрощает чтение текста с переносами и помогает сделать пользовательский интерфейс более адаптивным. Начиная с Android 13, производительность расстановки переносов оптимизирована на 200%, поэтому вы можете включить её в TextView практически без ущерба для производительности. Чтобы включить более быструю расстановку переносов, используйте частоты fullFast или normalFast в setHyphenationFrequency() .

API преобразования текста

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

  1. Введите хирагану в качестве фонетического произношения поискового запроса (например, названия места или приложения).
  2. Используйте клавиатуру для преобразования символов хираганы в кандзи.
  3. Повторный поиск с использованием символов кандзи
  4. Наконец-то получите результаты поиска

Благодаря новому API для преобразования текста пользователи из Японии могут вводить текст на хирагане и сразу же видеть результаты поиска по кандзи в режиме реального времени, пропуская шаги 2 и 3.

Улучшенная высота строк для нелатинских шрифтов

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

Высота строк, которая была обрезана в Android 12 (вверху), теперь позиционируется лучше и не обрезается в Android 13 (внизу).

Улучшенный перенос японского текста

Начиная с Android 13, элементы TextView могут переносить текст по бунсэцу (наименьшая единица слова, которая звучит естественно) или фразам, а не по символам, что делает приложения на японском языке более стильными и читабельными. Вы можете воспользоваться этим переносом, используя android:lineBreakWordStyle="phrase" в элементах TextView.

Перенос японского текста с включенным стилем фраз (внизу) и без него (вверху).

Обновления библиотеки Unicode

В Android 13 реализованы последние улучшения, исправления и изменения, включенные в Unicode ICU 70 , Unicode CLDR 40 и Unicode 14.0 .

Вот несколько заметных изменений:

  • Английский (Канада) en‑CA и английский (Республика Филиппины) en‑PH используют ресурсы en English (Соединенные Штаты) en‑GB при отсутствии доступных ресурсов перевода.
  • Категория множественного числа « many » введена для испанского es , итальянского it , португальского pt и португальского (Португалия) pt‑PT . Подобно французскому варианту, введенному в CLDR v38 , она используется для больших чисел.

Цветные векторные шрифты

Векторные эмодзи COLRv1 (слева) и растровые эмодзи (справа)

Начиная с Android 13, система поддерживает рендеринг шрифтов COLR версии 1 (COLRv1) и обновляет системные эмодзи до формата COLRv1. COLRv1 — это очень компактный формат шрифтов, который быстро и чётко отображается при любом размере.

Для большинства приложений система всё обрабатывает сама, и COLRv1 просто работает. Однако, если ваше приложение реализует собственную визуализацию текста и использует системные шрифты, мы рекомендуем протестировать визуализацию эмодзи.

Чтобы узнать больше о COLRv1, ознакомьтесь со следующими ресурсами:

API размещения быстрых настроек

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

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

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

Начиная с Android 13, система отображает стандартное визуальное подтверждение при добавлении контента в буфер обмена. Новое подтверждение выполняет следующие действия:

  • Подтверждает, что содержимое было успешно скопировано.
  • Обеспечивает предварительный просмотр скопированного содержимого.

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

Копировать/Вставить виджет
Новый пользовательский интерфейс отображается при попадании содержимого в буфер обмена.

Предиктивный жест назад

В Android 13 реализована функция предиктивного жеста «Назад» для устройств Android, таких как телефоны, устройства с большими экранами и складные устройства. Для поддержки этой функции необходимо обновить приложение.

Подробную документацию см. в статье «Обновление приложения для поддержки предиктивного жеста «Назад»» . Вы также можете попробовать нашу практическую работу .

Bluetooth LE Аудио

Low Energy (LE) Audio — это беспроводная аудиотехнология, разработанная для замены Bluetooth Classic и поддерживающая определённые сценарии использования и топологии подключения. Она позволяет пользователям делиться аудиозаписями с друзьями и семьёй, а также подписываться на публичные трансляции для получения информации, развлечений или специальных возможностей. Технология разработана для того, чтобы пользователи могли получать высококачественный звук без ущерба для времени работы аккумулятора и легко переключаться между различными сценариями использования, недоступными в Bluetooth Classic. Начиная с Android 13, система включает встроенную поддержку LE Audio, поэтому разработчики получают эти возможности бесплатно на совместимых устройствах.

МИДИ 2.0

Начиная с Android 13, система поддерживает стандарт MIDI 2.0, включая возможность подключения оборудования MIDI 2.0 по USB. Этот стандарт предлагает такие функции, как повышенное разрешение для контроллеров, улучшенную поддержку не-западной интонации и более выразительное исполнение с использованием понотных контроллеров.

Повышение эффективности заставки

В Android 13 повышена эффективность анимированных заставок в API Splash Screen:

  • Система определяет длительность анимации непосредственно из AnimatedVectorDrawable . До Android 13 приходилось задавать windowSplashScreenAnimationDuration напрямую.

  • Используйте новый атрибут windowSplashScreenBehavior для большего контроля над тем, будет ли ваше приложение всегда отображать значок на заставке в Android 13 и более поздних версиях.

Подробную документацию см. в разделе Заставки .

Оптимизации ART

В Android 13 (уровень API 33) и выше ART значительно ускоряет переключение между нативным кодом и обратно, благодаря чему вызовы JNI теперь выполняются до 2,5 раз быстрее. Обработка ссылок во время выполнения также была переработана, сделав её практически неблокирующей, что ещё больше снижает задержки. Кроме того, можно использовать общедоступный API Reference.refersTo() для более быстрого возврата недоступных объектов, и вы заметите, что интерпретатор теперь работает быстрее благодаря оптимизированному поиску классов и методов. ART также выполняет более тщательную проверку байт-кода во время установки, что позволяет избежать затрат на проверку во время выполнения и обеспечивает быстрое время запуска приложения.

Конфиденциальность и безопасность

Более безопасный экспорт приемников, зарегистрированных в контексте

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

Эта конфигурация экспорта доступна в приложениях, которые выполняют по крайней мере одно из следующих действий:

Выбор фотографий

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

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

Новое разрешение на выполнение для находящихся поблизости устройств Wi-Fi

В Android 13 (уровень API 33) в группе разрешений NEARBY_DEVICES для приложений, управляющих подключениями устройства к ближайшим точкам доступа по Wi-Fi, появилось новое разрешение среды выполнения . Эти приложения должны объявлять новое разрешение NEARBY_WIFI_DEVICES при вызове нескольких различных API Wi-Fi . Кроме того, если приложения не получают данные о физическом местоположении из API Wi-Fi, им не нужно объявлять разрешение ACCESS_FINE_LOCATION при использовании Android 13 и более поздних версий.

Узнайте больше о разрешении для близлежащих устройств Wi-Fi .

Новое разрешение на использование точных сигналов тревоги

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

  • Ваше приложение представляет собой приложение-будильник или приложение-таймер.
  • Ваше приложение представляет собой календарь, который показывает уведомления о предстоящих событиях.

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

Понижение прав разработчика

Начиная с Android 13, ваше приложение может отзывать доступ к неиспользуемым разрешениям среды выполнения . Этот API позволяет вашему приложению выполнять задачи по повышению конфиденциальности, такие как:

  • Удалите неиспользуемые разрешения.
  • Соблюдайте рекомендации по работе с разрешениями, чтобы повысить доверие пользователей. Рекомендуется показывать пользователям диалоговое окно с разрешениями, которые вы отозвали заранее.

Схема подписи APK v3.1

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

Схема подписи версии 3.1 использует идентификатор блока, который не распознаётся в версии 12L и ниже. Поэтому платформа применяет следующее поведение подписывающего:

  • Устройства под управлением Android 13 и выше используют повернутый подписывающий элемент в блоке v3.1.
  • Устройства под управлением более старых версий Android игнорируют измененный подписант и вместо этого используют исходный подписант в блоке v3.0.

Приложениям, которые ещё не провели ротацию ключа подписи, не требуется никаких дополнительных действий. При каждой ротации ключа подписи система по умолчанию применяет схему подписи версии 3.1.

Приложения, которые уже выполнили ротацию и хотят продолжить использовать свой ротированный ключ подписи в блоке подписи v3.0, должны обновить свой вызов apksigner :

apksigner sign --ks keystore.jks |
  --key key.pk8 --cert cert.x509.pem
  --rotation-min-sdk-version API_LEVEL
  [signer_options] app-name.apk

...где API_LEVEL равен 32 или ниже.

Улучшенные отчеты об ошибках в Keystore и KeyMint

Для приложений, генерирующих ключи, Keystore и KeyMint теперь предоставляют более подробные и точные индикаторы ошибок. Мы добавили иерархию классов исключений в java.security.ProviderException с исключениями, специфичными для Android, включая коды ошибок Keystore/KeyMint и возможность повторной попытки. Вы также можете изменить методы генерации и использования ключей (подписание, шифрование) для генерации новых исключений. Улучшенная система отчётности об ошибках не ограничивается генерацией ключей и теперь должна предоставлять вам информацию, необходимую для повторной попытки генерации ключей.

Поддержка планшетов и больших экранов

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

Дополнительную информацию о новинках и вариантах тестирования можно найти на странице поддержки планшетов и устройств с большими экранами .

Графика

Программируемые шейдеры

Анимированный шейдер AGSL, адаптированный из этого шейдера GLSL .

Начиная с Android 13, система включает поддержку программируемых объектов RuntimeShader , поведение которых определяется с помощью языка шейдеров Android Graphics Shading Language ( AGSL ). AGSL во многом схож с GLSL, но работает в рамках движка рендеринга Android, позволяя настраивать отрисовку на холсте Android, а также фильтрацию содержимого View. В Android эти шейдеры используются для реализации эффектов ряби , размытия и растяжения при прокрутке . Android 13 и более поздние версии позволяют создавать аналогичные расширенные эффекты для вашего приложения.

Улучшения хореографа

В Android 13 появились публичные методы API для Choreographer и ASurfaceControl , которые предоставляют приложениям больше информации о возможных временных шкалах кадров и добавляют дополнительный контекст в SurfaceFlinger о жизненном цикле кадра. Как и раньше, приложения могут отправлять обратные вызовы в Choreographer и получать информацию о временной шкале кадров. В Android 13 (уровень API 33) Choreographer возвращает несколько возможных временных интервалов показа и соответствующие им крайние сроки показа. Приложения могут выбрать время показа и затем уведомить SurfaceFlinger о выборе. После этого SurfaceFlinger не будет пытаться применять транзакции или блокировать буферы до желаемого времени показа.

Если ваше приложение использует новые методы Choreographer и SurfaceControl, вы можете просмотреть жизненный цикл кадра приложения в трассировке Perfetto.

Камера

HDR-видеозахват

Начиная с Android 13, API Camera2 поддерживает захват видео в формате High Dynamic Range (HDR), что позволяет просматривать и записывать HDR-видеоконтент с помощью камеры. По сравнению со стандартным динамическим диапазоном (SDR), HDR обеспечивает более широкий цветовой диапазон и увеличивает динамический диапазон яркости (с текущих 100 кд/м² до тысяч кд/м²). Это обеспечивает качество видео, более близкое к реальному, с более насыщенными цветами, яркими светлыми участками и тёмными тенями.

Дополнительную информацию о захвате HDR-видео см. в документации по захвату HDR-видео .

СМИ

Пространственный звук

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

Опережающая маршрутизация звука

Чтобы помочь медиаприложениям определить, как будет маршрутизироваться их аудио, в Android 13 появились API маршрутизации аудио в классе AudioManager . API getAudioDevicesForAttributes() позволяет получить список устройств, которые могут использоваться для воспроизведения указанного аудио, а API getDirectProfilesForAttributes() помогает определить, можно ли напрямую воспроизвести ваш аудиопоток. Используйте эти API, чтобы определить наилучший AudioFormat для вашей звуковой дорожки.

Доступность

Аудиоописание

В Android 13 (API уровня 33) представлена новая общесистемная настройка специальных возможностей, которая позволяет пользователям включать аудиоописание во всех приложениях. Аудиоописание — это дополнительная дорожка повествования, которая представляет собой диктор, озвучивающий презентацию и описывающий происходящее на экране во время естественных пауз в аудио. Приложения могут отслеживать предпочтения пользователя в отношении аудиоописаний, отправляя запрос с помощью isAudioDescriptionRequested() , как показано в следующем фрагменте кода:

Котлин

private lateinit var accessibilityManager: AccessibilityManager

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)

// Where your media player is initialized
if (accessibilityManager.isAudioDescriptionRequested) {
    // User has requested to enable audio descriptions
}

Ява

private AccessibilityManager accessibilityManager;

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager.class);

// Where your media player is initialized
if(accessibilityManager.isAudioDescriptionRequested()) {
    // User has requested to enable audio descriptions
}

Приложения могут отслеживать изменение предпочтений пользователя, добавляя прослушиватель в AccessbilityManager :

Котлин

private val listener =
    AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
        // Preference changed; reflect its state in your media player
    }

override fun onStart() {
    super.onStart()

    accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}

override fun onStop() {
    super.onStop()

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}

Ява

private AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -> {
    // Preference changed; reflect its state in your media player
};

@Override
protected void onStart() {
    super.onStart();

    accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);
}

@Override
protected void onStop() {
    super.onStop();

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);
}

Основная функциональность

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

В Android 13 начинается обновление основных библиотек Android для соответствия версии OpenJDK 11 LTS, включая обновления библиотек и поддержку языка Java 11 для разработчиков приложений и платформ. Изменения основных библиотек, представленные в Android 13, также будут доступны для устройств Android 12 через обновление модуля ART Mainline в Google Play.

Android 13 включает следующие изменения в основных библиотеках:

  • Поддержка ключевого слова var для локальных переменных и лямбда-выражений в качестве параметров.
  • Новые методы в классе String:

    • isBlank()
    • lines()
    • repeat()
    • strip()
    • stripLeading()
    • stripTrailing()
  • Поддержка Collection.toArray(IntFunction) для упрощения адаптации коллекции к массиву.

  • Поддержка ifPresentOrElse() , isEmpty() , orElseThrow() и stream() в классах java.util Optional , OptionalDouble , OptionalInt и OptionalLong .

  • Расширенная поддержка SocketOptions , включая повторное использование сокетов.

  • Функциональность NullReader , NullWriter , InputStream , OutputStream и transferTo() Reader , которая передает прочитанные символы в Writer .

  • Добавлена функциональность для кодирования и декодирования URL с использованием Charsets .

  • Функциональность Charset для FileReader , FileWriter , PrintStream и PrintWriter .

  • Новые функции transferTo() , readNBytes() , readAllBytes() и writeBytes() для ByteArrayInput или OutputStream и Input или OutputStream .

  • Поддержка среды выполнения и компилятора для java.lang.invoke.VarHandle .

  • Обновляет java.util.concurrent до API OpenJDK 11 с использованием внутреннего VarHandle .

Java и OpenJDK являются товарными знаками или зарегистрированными товарными знаками Oracle и/или ее аффилированных лиц.