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

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

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

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

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

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

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

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

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

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

Дополнительные сведения и инструкции см. в разделе Адаптивные значки .

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

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

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

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

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

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

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

    Для обратной совместимости с предыдущими версиями Android в AndroidX также доступны эквивалентные API. Мы рекомендуем использовать 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, TextViews может обертывать текст по бунсэцу (наименьшая единица слова, которая звучит естественно) или фразам, а не по символам, для более совершенных и читаемых японских приложений. Вы можете воспользоваться преимуществами этой упаковки, используя android:lineBreakWordStyle="phrase" с TextViews.

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

Обновления библиотеки Юникода

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

Вот пара заметных изменений:

  • Английский (Канада) en‑CA и английский (Республика Филиппины) en‑PH используют ресурсы перевода английского (США) en , когда нет доступных ресурсов перевода вместо английского (Великобритания) 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 и обеспечения определенных вариантов использования и топологий подключения. Он позволяет пользователям делиться и транслировать свои аудиозаписи друзьям и родственникам или подписываться на общедоступные трансляции для получения информации, развлечений или доступности. Он разработан для того, чтобы пользователи могли получать высококачественный звук, не жертвуя временем автономной работы, и могли плавно переключаться между различными вариантами использования, которые невозможны с помощью 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 и более поздних версиях.

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

Оптимизация АРТ

В 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, связанные с ротацией. В частности, схема подписи версии 3.1 поддерживает таргетинг на версию SDK, что позволяет использовать ротацию для более поздней версии платформы.

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

  • На устройствах под управлением Android 13 или более поздней версии в блоке версии 3.1 используется повернутая подписывающая сторона.
  • Устройства под управлением более старых версий Android игнорируют поменянную подписывающую сторону и вместо этого используют исходную подписывающую сторону в блоке версии 3.0.

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

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

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

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

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

Камера

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

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

Дополнительные сведения о захвате видео 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 через обновление системы Google Play для основного модуля ART.

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

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

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

  • Поддержка ifPresentOrElse() , isEmpty() OptionalDouble orElseThrow() stream() в классах java.util , Optional , 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 и/или ее дочерних компаний.