Android 15 представляет множество замечательных функций и API для разработчиков. В следующих разделах приведено краткое описание этих функций, которое поможет вам начать работу с соответствующими API.
Подробный список добавленных, измененных и удаленных API см. в отчете об изменениях API . Подробную информацию о добавленных API см. в справочнике API Android — для Android 15 ищите API, добавленные в API уровня 35. Чтобы узнать о том, как изменения платформы могут повлиять на ваши приложения, обязательно ознакомьтесь с изменениями в поведении Android 15 для приложений, ориентированных на Android 15 , и для всех приложений .
Камера и медиа
Android 15 включает в себя множество функций, улучшающих работу с камерой и мультимедиа, а также предоставляющих доступ к инструментам и оборудованию, которые помогут создателям воплотить свои идеи в жизнь на Android.
Более подробную информацию о новейших функциях и решениях для разработчиков, связанных с медиаконтентом и камерой Android, можно найти в докладе «Создание современных возможностей для работы с медиаконтентом и камерой Android» на конференции Google I/O.
Усиление низкой освещенности
Android 15 引入了弱光增强功能,这是一种自动曝光模式,适用于 Camera 2 和夜间模式相机扩展。“弱光增强”功能可在光线昏暗的环境下调整预览画面的曝光度。这与夜间模式相机扩展程序创建静态图片的方式不同,因为夜间模式会将一系列照片组合起来,以创建一张经过增强的单张图片。虽然夜间模式非常适合拍摄静态图片,但无法创建连续的帧流,而“低光增强”功能可以。因此,弱光增强功能可启用相机功能,例如:
- 提供增强型图片预览,以便用户更好地取景拍摄低光照片
- 在光线不足的情况下扫描二维码
如果您启用“弱光增强”功能,该功能会在光线较弱时自动开启,在光线较强时关闭。
应用可以在光线昏暗的环境下录制预览画面,以保存经过亮度提升的视频。
如需了解详情,请参阅弱光增强。
Встроенные элементы управления камерой в приложении.
В Android 15 добавлено расширение для большего контроля над оборудованием камеры и ее алгоритмами на поддерживаемых устройствах:
- Расширенные настройки мощности вспышки позволяют точно контролировать интенсивность вспышки как в режиме
SINGLE, так и в режимеTORCHпри съемке изображений.
контроль запаса мощности HDR
Android 15 会选择适合底层设备功能和面板位深的 HDR 余量。对于包含大量 SDR 内容的网页(例如显示单个 HDR 缩略图的消息应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。在 Android 15 中,您可以使用 setDesiredHdrHeadroom 控制 HDR 余量,以便在 SDR 内容和 HDR 内容之间取得平衡。
Регулировка громкости

В Android 15 реализована поддержка стандарта громкости CTA-2075, который поможет вам избежать несоответствия громкости звука и гарантировать, что пользователям не придется постоянно регулировать громкость при переключении между контентом. Система использует известные характеристики устройств вывода (наушников и динамика), а также метаданные громкости, доступные в аудиоконтенте AAC, для интеллектуальной регулировки громкости звука и уровней сжатия динамического диапазона.
Чтобы включить эту функцию, вам необходимо убедиться, что метаданные громкости доступны в вашем контенте AAC, и включить функцию платформы в вашем приложении. Для этого вы создаете экземпляр объекта LoudnessCodecController , вызывая его фабричный метод create с идентификатором аудиосеанса из связанного AudioTrack ; это автоматически начнет применять аудиообновления. Вы можете передать OnLoudnessCodecUpdateListener для изменения или фильтрации параметров громкости перед их применением в MediaCodec .
// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
.setSessionId(sessionId)
.build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
val lcController = LoudnessCodecController.create(mSessionId)
// Starts applying audio updates for each added MediaCodec
}
AndroidX media3 ExoPlayer также будет обновлен для использования API-интерфейсов LoudnessCodecController для плавной интеграции приложений.
Виртуальные MIDI 2.0 устройства
Android 13 添加了对使用 USB 连接 MIDI 2.0 设备的支持,这些设备使用通用 MIDI 数据包 (UMP) 进行通信。Android 15 将 UMP 支持扩展到了虚拟 MIDI 应用,使作曲应用能够像使用 USB MIDI 2.0 设备一样,将虚拟 MIDI 2.0 设备用作控制合成器应用的设备。
Более эффективное программное декодирование AV1

dav1d , популярный программный декодер AV1 от VideoLAN, доступен для устройств Android, которые не поддерживают декодирование AV1 аппаратно. dav1d почти в 3 раза более производительен, чем устаревший программный декодер AV1, что позволяет воспроизводить HD AV1 большему количеству пользователей, включая некоторые устройства низкого и среднего уровня.
Ваше приложение должно согласиться на использование dav1d, вызвав его по имени "c2.android.av1-dav1d.decoder" . В последующем обновлении dav1d станет программным декодером AV1 по умолчанию. Эта поддержка стандартизирована и перенесена на устройства Android 11, которые получают обновления системы Google Play.
Инструменты и средства повышения производительности разработчиков
Хотя большая часть нашей работы по повышению вашей производительности сосредоточена на таких инструментах, как Android Studio , Jetpack Compose и библиотеки Android Jetpack , мы всегда ищем способы в рамках платформы, которые помогут вам легче воплотить ваши идеи в жизнь.
Обновления OpenJDK 17
Android 15 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致。
其中包含以下主要功能和改进:
- 改进了 NIO 缓冲区的使用体验
- 数据流
- 其他
math和strictmath方法 util软件包更新,包括顺序的collection、map和setDeflater中的ByteBuffer支持- 安全更新,例如
X500PrivateCredential和安全密钥更新
这些 API 会通过 Google Play 系统更新在搭载 Android 12(API 级别 31)及更高版本的 10 亿多部设备上更新,以便您以最新的编程功能为目标平台。
Улучшения в работе с PDF-файлами
Android 15 включает существенные улучшения API-интерфейсов PdfRenderer . Приложения могут включать расширенные функции, такие как отображение файлов, защищенных паролем , аннотаций, редактирования форм , поиска и выбора с копированием. Поддерживается оптимизация линеаризованных PDF-файлов для ускорения локального просмотра PDF-файлов и сокращения использования ресурсов. Библиотека Jetpack PDF использует эти API для упрощения добавления возможностей просмотра PDF-файлов в ваше приложение.

PdfRenderer был перенесен в модуль, который можно обновлять с помощью обновлений системы Google Play независимо от версии платформы, и мы поддерживаем эти изменения обратно в Android 11 (уровень API 30), создавая совместимую версию до Android 15. Поверхность API, называемая PdfRendererPreV .
Android 15 включает существенные улучшения API-интерфейсов PdfRenderer . Приложения могут включать расширенные функции, такие как отображение файлов, защищенных паролем , аннотаций, редактирования форм , поиска и выбора с копированием. Поддерживается оптимизация линеаризованных PDF-файлов для ускорения локального просмотра PDF-файлов и сокращения использования ресурсов. Библиотека Jetpack PDF использует эти API для упрощения добавления возможностей просмотра PDF-файлов в ваше приложение.

PdfRenderer был перенесен в модуль, который можно обновлять с помощью обновлений системы Google Play независимо от версии платформы, и мы поддерживаем эти изменения обратно в Android 11 (уровень API 30), создавая совместимую версию до Android 15. Поверхность API, называемая PdfRendererPreV .
Android 15 включает существенные улучшения API-интерфейсов PdfRenderer . Приложения могут включать расширенные функции, такие как отображение файлов, защищенных паролем , аннотаций, редактирования форм , поиска и выбора с копированием. Поддерживается оптимизация линеаризованных PDF-файлов для ускорения локального просмотра PDF-файлов и сокращения использования ресурсов. Библиотека Jetpack PDF использует эти API для упрощения добавления возможностей просмотра PDF-файлов в ваше приложение.

PdfRenderer был перенесен в модуль, который можно обновлять с помощью обновлений системы Google Play независимо от версии платформы, и мы поддерживаем эти изменения обратно в Android 11 (уровень API 30), создавая совместимую версию до Android 15. Поверхность API, называемая PdfRendererPreV .
Улучшения автоматического переключения языка
Android 14 在音频中添加了设备端多语言识别功能,并支持在语言之间自动切换,但这可能会导致丢失字词,尤其是当两次语音之间语言切换的间隔时间较短时。Android 15 添加了其他控件,以帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS 会将自动切换限制在音频会话开始时,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES 会在发生指定次数的切换后停用语言切换。如果您预计会话期间只会使用一种语言,并且该语言应被自动检测到,这些选项会特别有用。
Улучшен API вариативных шрифтов OpenType.
Android 15 提高了 OpenType 可变字体的易用性。您可以创建
来自可变字体的 FontFamily 实例,而不指定粗细轴
使用 buildVariableFamily API。文本渲染程序会替换 wght 轴的值,以匹配显示的文本。
使用该 API 可以大大简化创建 Typeface 的代码:
Kotlin
val newTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build()
Java
Typeface newTypeface = Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build();
以前,如需创建相同的 Typeface,您需要更多代码:
Kotlin
val oldTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build()) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ).build() ).build()
Java
Typeface oldTypeface = new Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ) .build() ).build();
以下示例展示了同时使用旧版和新版 API 创建的 Typeface 的呈现方式:
在此示例中,使用旧 API 创建的 Typeface 不包含
为 350、450、550 和 650 创建准确的字体粗细
Font 实例,因此渲染程序会回退到最接近的权重。在
在此示例中,系统会渲染 300 而不是 350,渲染 400 而不是 450,
依此类推。相比之下,使用新 API 创建的 Typeface 会为给定重量动态创建 Font 实例,因此系统也会为 350、450、550 和 650 呈现准确的重量。
Гранулярные элементы управления разрывом строки
从 Android 15 开始,TextView 和底层行断开符可以将给定部分文本保留在同一行中,以提高可读性。您可以通过在字符串资源或 createNoBreakSpan 中使用 <nobreak> 标记来充分利用此换行符自定义功能。同样,您可以使用 <nohyphen> 标记或 createNoHyphenationSpan 来防止对字词进行分词。
例如,以下字符串资源不包含换行符,在呈现时,文本“Pixel 8 Pro”会在不合适的位置换行:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
相比之下,此字符串资源包含 <nobreak> 标记,该标记会将字词“Pixel 8 Pro”换行,并防止换行:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
以下图片展示了这些字符串呈现方式的差异:
<nobreak> 标记换行。
<nobreak> 标记封装“Pixel 8 Pro.”短语的同一行文本的布局。архивирование приложений
Android and Google Play announced support for app archiving last year, allowing users to free up space by partially removing infrequently used apps from the device that were published using Android App Bundle on Google Play. Android 15 includes OS level support for app archiving and unarchiving, making it easier for all app stores to implement it.
Apps with the REQUEST_DELETE_PACKAGES permission can call the
PackageInstaller requestArchive method to request archiving an
installed app package, which removes the APK and any cached files, but persists
user data. Archived apps are returned as displayable apps through the
LauncherApps APIs; users will see a UI treatment to highlight that those
apps are archived. If a user taps on an archived app, the responsible installer
will get a request to unarchive it, and the restoration process can be
monitored by the ACTION_PACKAGE_ADDED broadcast.
Включите режим 16 КБ на устройстве с помощью параметров разработчика.

Включите параметр разработчика «Загрузка с размером страницы 16 КБ» , чтобы загрузить устройство в режиме 16 КБ.
В версиях Android 15 QPR можно использовать режим разработчика , доступный на некоторых устройствах, чтобы загрузить устройство в режиме 16 КБ и выполнить тестирование на устройстве. Перед использованием режима разработчика перейдите в Настройки > Система > Обновления ПО и примените все доступные обновления.
Данная опция для разработчиков доступна на следующих устройствах:
Pixel 8 и 8 Pro (с Android 15 QPR1 или выше)
Pixel 8a (с Android 15 QPR1 или выше)
Pixel 9, 9 Pro и 9 Pro XL (с Android 15 QPR2 или выше)
Pixel 9a (с Android 16 или выше)
Графика
Android 15 привносит новейшие графические улучшения, включая технологию ANGLE и дополнения к графической системе Canvas.
Модернизация доступа к графическому процессору в Android
Аппаратное обеспечение Android значительно изменилось с первых дней, когда основная ОС работала на одном процессоре, а доступ к графическим процессорам осуществлялся с использованием API-интерфейсов, основанных на конвейерах с фиксированными функциями. Графический API Vulkan® доступен в NDK начиная с Android 7.0 (уровень API 24) с абстракцией более низкого уровня, которая лучше отражает современное аппаратное обеспечение графического процессора, лучше масштабируется для поддержки нескольких ядер ЦП и обеспечивает снижение нагрузки на драйвер ЦП, что приводит к улучшению производительность приложения. Vulkan поддерживается всеми современными игровыми движками.
Vulkan — предпочтительный интерфейс Android для графического процессора. Поэтому Android 15 включает ANGLE в качестве дополнительного уровня для запуска OpenGL® ES поверх Vulkan. Переход на ANGLE позволит стандартизировать реализацию Android OpenGL для улучшения совместимости и, в некоторых случаях, повышения производительности. Вы можете проверить стабильность и производительность вашего приложения OpenGL ES с помощью ANGLE, включив опцию разработчика в «Настройки» -> «Система» -> «Параметры разработчика» -> «Экспериментально: включить ANGLE на Android 15».
Android ANGLE на дорожной карте Vulkan

В рамках оптимизации нашего стека графических процессоров в дальнейшем мы будем поставлять ANGLE в качестве системного драйвера GL на большее количество новых устройств, при этом в будущем ожидается, что OpenGL/ES будет доступен только через ANGLE. При этом мы планируем продолжить поддержку OpenGL ES на всех устройствах .
Рекомендуемые следующие шаги
Используйте параметры разработчика, чтобы выбрать драйвер ANGLE для OpenGL ES и протестировать свое приложение. Для новых проектов мы настоятельно рекомендуем использовать Vulkan для C/C++.
Улучшения для Canvas
Android 15 继续对 Android 的 Canvas 图形系统进行现代化改造,并新增了以下功能:
Matrix44提供一个 4x4 矩阵来转换坐标,当您想在 3D 中操控画布时,应使用此矩阵。clipShader会将当前剪裁区域与指定的着色器相交,而clipOutShader会将剪裁区域设为当前剪裁区域与着色器的差值,每个操作都会将着色器视为一个 Alpha 遮罩。这支持高效地绘制复杂形状。
Производительность и батарея
Android продолжает уделять основное внимание улучшению производительности и качества ваших приложений. Android 15 представляет API, которые помогают сделать выполнение задач в вашем приложении более эффективным, оптимизировать производительность приложения и собирать информацию о ваших приложениях.
Рекомендации по энергоэффективности, отладка использования сети и энергии, а также подробная информация о том, как мы повышаем эффективность использования батареи в фоновом режиме в Android 15 и последних версиях Android, представлены в докладе « Повышение эффективности использования батареи в фоновом режиме на Android» на конференции Google I/O.
API ApplicationStartInfo
在以前的 Android 版本中,应用启动一直是个谜。在应用中确定应用是从冷启动、温启动还是热启动状态启动很困难。您还很难了解应用在各种启动阶段(分叉进程、调用 onCreate、绘制第一个帧等)所花的时间。在 Application 类被实例化时,您无法知道应用是通过广播、content provider、作业、备份、启动完成、闹钟还是 Activity 启动的。
Android 15 上的 ApplicationStartInfo API 提供了所有这些功能,以及更多功能。您甚至可以选择在流程中添加自己的时间戳,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo 直接优化应用启动;例如,您可以消除在应用因广播而启动时在 Application 类中实例化与界面相关的库所带来的高昂开销。
Подробная информация о размере приложения
Начиная с Android 8.0 (уровень API 26), Android включает API StorageStats.getAppBytes , который суммирует установленный размер приложения как одно число байтов, которое представляет собой сумму размера APK, размера файлов, извлеченных из APK, и файлы, созданные на устройстве, такие как предварительно скомпилированный код (AOT). Это число не очень информативно с точки зрения того, как ваше приложение использует хранилище.
В Android 15 добавлен API StorageStats.getAppBytesByDataType([type]) , который позволяет вам получить представление о том, как ваше приложение использует все это пространство, включая разделение файлов APK, код, связанный с AOT и ускорением, метаданные dex, библиотеки и управляемые профили.
Профилирование, управляемое приложением
Android 15 包含 ProfilingManager 类,可让您从应用内部收集性能分析信息,例如堆转储、堆分析报告、堆栈采样等。它使用提供的标记为您的应用提供回调,以标识输出文件,该文件将传递给应用的文件目录。该 API 会进行速率限制,以尽可能降低对性能的影响。
为了简化在应用中构建性能分析请求的过程,我们建议您使用 Core 1.15.0-rc01 或更高版本中的相应 Profiling AndroidX API。
Улучшения базы данных SQLite
В Android 15 представлены API-интерфейсы SQLite, которые предоставляют расширенные функции базового механизма SQLite, направленные на решение конкретных проблем с производительностью, которые могут проявляться в приложениях. Эти API включены в обновление SQLite до версии 3.44.3 .
Разработчикам следует ознакомиться с передовыми практиками производительности SQLite , чтобы максимально эффективно использовать свою базу данных SQLite, особенно при работе с большими базами данных или при выполнении запросов, чувствительных к задержке.
- Отложенные транзакции только для чтения : при выпуске транзакций, предназначенных только для чтения (не включая операторы записи), используйте
beginTransactionReadOnly()иbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)для выполненияDEFERREDтранзакций только для чтения. Такие транзакции могут выполняться одновременно друг с другом, а если база данных находится в режиме WAL, они могут выполняться одновременно сIMMEDIATEилиEXCLUSIVEтранзакциями. - Количество и идентификаторы строк : были добавлены API для получения количества измененных строк или идентификатора последней вставленной строки без выполнения дополнительного запроса.
getLastChangedRowCount()возвращает количество строк, которые были вставлены, обновлены или удалены последним оператором SQL в текущей транзакции, аgetTotalChangedRowCount()возвращает количество в текущем соединении.getLastInsertRowId()возвращаетrowidпоследней строки, которая будет вставлена в текущее соединение. - Необработанные операторы : выдайте необработанный оператор SQlite, минуя удобные оболочки и любые дополнительные накладные расходы на обработку, которые они могут понести.
Обновления Android Dynamic Performance Framework
Android 15 继续投资于 Android 动态性能框架 (ADPF),这是一组 API,可让游戏和性能密集型应用更为直接地与 Android 设备的电源和散热系统进行互动。在受支持的设备上,Android 15 添加了 ADPF 功能:
- 针对提示会话的节能模式,用于指明其关联的线程应优先节能而非性能,非常适合长时间运行的后台工作负载。
- 系统可以在提示会话中报告 GPU 和 CPU 工作时长,以便同时调整 CPU 和 GPU 频率,以最佳方式满足工作负载需求。
- 热余量阈值,用于根据余量预测来解读可能的热节流状态。
如需详细了解如何在应用和游戏中使用 ADPF,请参阅相关文档。
Конфиденциальность
Android 15 включает в себя множество функций, которые помогают разработчикам приложений защищать конфиденциальность пользователей.
Обнаружение записи экрана
В Android 15 добавлена поддержка приложений, позволяющих обнаружить, что они записываются. Обратный вызов вызывается всякий раз, когда приложение становится видимым или невидимым во время записи экрана. Приложение считается видимым, если записываются действия, принадлежащие UID процесса регистрации. Таким образом, если ваше приложение выполняет конфиденциальную операцию, вы можете сообщить пользователю, что его действия записываются.
val mCallback = Consumer<Int> { state ->
if (state == SCREEN_RECORDING_STATE_VISIBLE) {
// We're being recorded
} else {
// We're not being recorded
}
}
override fun onStart() {
super.onStart()
val initialState =
windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
mCallback.accept(initialState)
}
override fun onStop() {
super.onStop()
windowManager.removeScreenRecordingCallback(mCallback)
}
Расширенные возможности IntentFilter
Android 15 通过 UriRelativeFilterGroup 支持更精确的 Intent 解析,UriRelativeFilterGroup 包含一组 UriRelativeFilter 对象,这些对象构成一组必须满足的 Intent 匹配规则,包括网址查询参数、网址片段以及屏蔽或排除规则。
您可以在 AndroidManifest XML 文件中使用 <uri-relative-filter-group> 标记来定义这些规则,该标记可以包含 android:allow 标记。这些代码可以包含使用现有数据代码属性以及 android:query 和 android:fragment 属性的 <data> 代码。
下面是一个 AndroidManifest 语法示例:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="astore.com" />
<uri-relative-filter-group>
<data android:pathPrefix="/auth" />
<data android:query="region=na" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:query="mobileoptout=true" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:fragmentPrefix="faq" />
</uri-relative-filter-group>
</intent-filter>
Личное пространство
Личное пространство позволяет пользователям создать на своем устройстве отдельное пространство, где они смогут хранить конфиденциальные приложения вдали от посторонних глаз, используя дополнительный уровень аутентификации. В личном пространстве используется отдельный профиль пользователя. Пользователь может выбрать использование блокировки устройства или отдельный фактор блокировки для личного пространства.
Приложения в личном пространстве отображаются в отдельном контейнере на панели запуска и скрыты от просмотра последних, уведомлений, настроек и других приложений, когда личное пространство заблокировано. Созданный и загруженный пользователем контент (например, медиафайлы или файлы) и учетные записи разделены между частным пространством и основным пространством. Системный общий лист и средство выбора фотографий можно использовать для предоставления приложениям доступа к контенту в разных пространствах, когда личное пространство разблокировано.
Пользователи не могут перемещать существующие приложения и их данные в личное пространство. Вместо этого пользователи выбирают вариант установки в личном пространстве, чтобы установить приложение, используя любой магазин приложений, который они предпочитают. Приложения в личном пространстве устанавливаются как отдельные копии любых приложений в основном пространстве (новые копии одного и того же приложения).
Когда пользователь блокирует личное пространство, профиль останавливается. Пока профиль остановлен, приложения в личном пространстве больше не активны и не могут выполнять приоритетные или фоновые действия, включая показ уведомлений.
Мы рекомендуем вам протестировать свое приложение в личном пространстве, чтобы убедиться, что оно работает должным образом, особенно если ваше приложение попадает в одну из следующих категорий:
- Приложения с логикой рабочих профилей , которая предполагает, что все установленные копии их приложений, которых нет в основном профиле, находятся в рабочем профиле.
- Медицинские приложения
- Приложения для запуска
- Приложения из магазина приложений
Запрос последнего выбранного пользователем элемента для доступа к выбранным фотографиям.
Приложения теперь могут выделять только те фотографии и видео, которые были выбраны последними, если предоставлен частичный доступ к медиа-разрешениям. Эта функция может улучшить взаимодействие с пользователем в приложениях, которые часто запрашивают доступ к фотографиям и видео. Чтобы использовать эту функцию в своем приложении, включите аргумент QUERY_ARG_LATEST_SELECTION_ONLY при запросе MediaStore через ContentResolver .
Котлин
val externalContentUri = MediaStore.Files.getContentUri("external") val mediaColumns = arrayOf( FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE, ) val queryArgs = bundleOf( // Return only items from the last selection (selected photos access) QUERY_ARG_LATEST_SELECTION_ONLY to true, // Sort returned items chronologically based on when they were added to the device's storage QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC", QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?", QUERY_ARG_SQL_SELECTION_ARGS to arrayOf( FileColumns.MEDIA_TYPE_IMAGE.toString(), FileColumns.MEDIA_TYPE_VIDEO.toString() ) )
Ява
Uri externalContentUri = MediaStore.Files.getContentUri("external"); String[] mediaColumns = { FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE }; Bundle queryArgs = new Bundle(); queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC"); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?"); queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] { String.valueOf(FileColumns.MEDIA_TYPE_IMAGE), String.valueOf(FileColumns.MEDIA_TYPE_VIDEO) });
«Песочница конфиденциальности» на Android
Android 15 включает новейшие расширения Android Ad Services, включая последнюю версию Privacy Sandbox для Android . Это дополнение является частью нашей работы по разработке технологий, которые улучшают конфиденциальность пользователей и обеспечивают эффективную персонализированную рекламу для мобильных приложений. На нашей странице «Песочница конфиденциальности» вы найдете дополнительную информацию о предварительной версии и бета-версиях Privacy Sandbox для разработчиков Android, которые помогут вам начать работу.
Health Connect
Android 15 объединяет новейшие расширения Health Connect от Android — безопасной и централизованной платформы для управления и обмена данными о здоровье и фитнесе, собранными приложениями. В этом обновлении добавлена поддержка дополнительных типов данных о фитнесе , питании , температуре кожи, планах тренировок и многом другом.
Отслеживание температуры кожи позволяет пользователям хранить и передавать более точные данные о температуре с носимого или другого устройства отслеживания.
Планы тренировок — это структурированные планы тренировок, которые помогают пользователю достичь своих целей в фитнесе. Поддержка планов обучения включает в себя различные цели завершения и производительности:
- Цели достижения, касающиеся сожженных калорий , расстояния , продолжительности , повторений и шагов .
- Цели производительности включают максимально возможное количество повторений (AMRAP) , частоту шагов , частоту сердечных сокращений , мощность , воспринимаемую скорость нагрузки и скорость .
Узнайте больше о последних обновлениях Health Connect в Android в докладе «Создание адаптируемого опыта с помощью Android Health» от Google I/O.
,Android 15 объединяет новейшие расширения Health Connect от Android — безопасной и централизованной платформы для управления и обмена данными о здоровье и фитнесе, собранными приложениями. В этом обновлении добавлена поддержка дополнительных типов данных о фитнесе , питании , температуре кожи, планах тренировок и многом другом.
Отслеживание температуры кожи позволяет пользователям хранить и передавать более точные данные о температуре с носимого или другого устройства слежения.
Планы тренировок — это структурированные планы тренировок, которые помогают пользователю достичь своих целей в фитнесе. Поддержка планов обучения включает в себя различные цели завершения и производительности:
- Цели достижения, касающиеся сожженных калорий , расстояния , продолжительности , повторений и шагов .
- Цели производительности включают максимально возможное количество повторений (AMRAP) , частоту шагов , частоту сердечных сокращений , мощность , воспринимаемую скорость нагрузки и скорость .
Узнайте больше о последних обновлениях Health Connect в Android в докладе «Создание адаптируемого опыта с помощью Android Health» от Google I/O.
Совместное использование экрана приложения
Android 15 поддерживает совместное использование экрана приложения, поэтому пользователи могут делиться или записывать только окно приложения, а не весь экран устройства. Эта функция, впервые включенная в Android 14 QPR2, включает обратные вызовы MediaProjection , которые позволяют вашему приложению настраивать процесс совместного использования экрана приложения. Обратите внимание, что для приложений, предназначенных для Android 14 (уровень API 34) или выше, требуется согласие пользователя для каждого сеанса захвата MediaProjection .
Пользовательский опыт и пользовательский интерфейс системы
Android 15 предоставляет разработчикам приложений и пользователям больше контроля и гибкости в настройке своих устройств в соответствии с их потребностями.
Чтобы узнать больше о том, как использовать последние улучшения в Android 15 для улучшения пользовательского опыта вашего приложения, посмотрите доклад « Улучшение пользовательского опыта вашего Android-приложения» с конференции Google I/O.
Более информативный предварительный просмотр виджетов с помощью API генерированных предварительных просмотров.
在 Android 15 之前,提供微件选择器预览的唯一方法是指定静态图片或布局资源。这些预览通常与放置在主屏幕上的实际 widget 的外观大不相同。此外,由于无法使用 Jetpack Glance 创建静态资源,因此“资讯一览” 开发者必须为其微件截屏或创建 XML 布局, 微件预览。
Android 15 添加了对生成的预览的支持。这意味着,应用微件提供程序可以生成 RemoteViews 以用作选择器预览,而不是静态资源。
推送 API
应用可以通过推送 API 提供生成的预览。应用可以提供
预览,并且不会收到明确的请求,
以提供预览。预览会保留在 AppWidgetService 中,并且主持人可以按需请求预览。以下示例加载了一个 XML 微件
并将其设置为预览:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
预期的流程如下:
- 任何时候,widget 提供程序都会调用
setWidgetPreview。提供的预览会与其他提供方信息一起保留在AppWidgetService中。 setWidgetPreview会通过AppWidgetHost.onProvidersChanged回调。作为回应,微件宿主会重新加载其所有提供方信息。- 显示微件预览时,主机会检查
AppWidgetProviderInfo.generatedPreviewCategories,如果所选类别可用,则调用AppWidgetManager.getWidgetPreview以返回此提供程序的已保存预览。
何时调用 setWidgetPreview
由于没有用于提供预览的回调,因此应用可以选择在运行期间的任何时间发送预览。预览的更新频率取决于微件的用例。
以下列表介绍了两大类预览用例:
- 在 widget 预览中显示真实数据(例如个性化数据)的提供程序 或最新信息。这些提供商可以设置预览 已登录 Google 账号或已在其应用中完成初始配置。之后 可以设置一项定期任务,按照所选的节奏更新预览。 此类 widget 的示例包括照片、日历、天气或新闻 widget。
- 在预览中显示静态信息或不显示任何数据的快捷操作 widget 的提供程序。这些提供程序可以在应用首次启动时设置预览一次。例如,快速开车便是此类微件的示例 操作 widget 或 Chrome 快捷方式 widget。
某些提供商可能会在基座接入模式选择器上显示静态预览,但真实的 信息。这些提供商应遵循指南 设置预览
Картинка в картинке
В Android 15 представлены изменения в режиме «картинка в картинке» (PiP), обеспечивающие еще более плавный переход при входе в режим «картинка в картинке». Это будет полезно для приложений, в которых элементы пользовательского интерфейса накладываются поверх основного пользовательского интерфейса, который входит в PiP.
Разработчики используют обратный вызов onPictureInPictureModeChanged для определения логики, которая переключает видимость наложенных элементов пользовательского интерфейса. Этот обратный вызов запускается, когда завершается анимация входа или выхода PiP. Начиная с Android 15, класс PictureInPictureUiState включает еще одно состояние.
В этом состоянии пользовательского интерфейса приложения, предназначенные для Android 15 (уровень API 35), будут наблюдать за вызовом обратного вызова Activity#onPictureInPictureUiStateChanged с помощью isTransitioningToPip() как только начнется анимация PiP. Существует множество элементов пользовательского интерфейса, которые не имеют отношения к приложению, когда оно находится в режиме «картинка в картинке», например представления или макет, включающие такую информацию, как предложения, предстоящие видео, рейтинги и заголовки. Когда приложение переходит в режим PiP, используйте обратный вызов onPictureInPictureUiStateChanged , чтобы скрыть эти элементы пользовательского интерфейса. Когда приложение переходит в полноэкранный режим из окна PiP, используйте обратный вызов onPictureInPictureModeChanged чтобы отобразить эти элементы, как показано в следующих примерах:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
Это быстрое переключение видимости ненужных элементов пользовательского интерфейса (для окна PiP) помогает обеспечить более плавную анимацию входа в PiP без мерцания.
Улучшены правила режима «Не беспокоить».
AutomaticZenRule 允许应用自定义注意力机制
管理(勿扰)规则,并确定何时启用或停用
。Android 15 极大地增强了这些规则,旨在提高
用户体验。其中包含以下增强功能:
- 向
AutomaticZenRule添加类型,让系统能够应用特殊类型 对某些规则的处理 - 向
AutomaticZenRule添加图标,使模式更加丰富 易于识别。 - 将
triggerDescription字符串添加到AutomaticZenRule,用于描述 规则应当对用户生效的条件。 - 已添加
ZenDeviceEffects更改为AutomaticZenRule,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。
Настройте эффект вибрации для каналов уведомлений.
Android 15 поддерживает настройку насыщенной вибрации для входящих уведомлений по каналам с помощью NotificationChannel.setVibrationEffect , поэтому ваши пользователи могут различать разные типы уведомлений, не глядя на свое устройство.
Индикатор состояния проекции и автоматическая остановка
Медиа-проекция может раскрыть личную информацию пользователя. Новый, заметный чип строки состояния информирует пользователей о любой текущей проекции экрана. Пользователи могут коснуться чипа, чтобы остановить трансляцию экрана, совместное использование или запись. Кроме того, для более интуитивно понятного взаимодействия с пользователем любое текущее проецирование экрана теперь автоматически останавливается при блокировке экрана устройства.

Большие экраны и форм-факторы
Android 15 обеспечивает вашим приложениям поддержку, позволяющую максимально эффективно использовать форм-факторы Android, включая большие экраны, устройства с откидной и складной клавиатурой.
Улучшена многозадачность на большом экране.
Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。
Google I/O 大会上有一些关于构建自适应 Android 的会议 应用和使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。
Поддержка внешнего экрана
Ваше приложение может объявить свойство , которое Android 15 использует, чтобы позволить вашему Application или Activity отображаться на небольших верхних экранах поддерживаемых переворачивающихся устройств. Эти экраны слишком малы, чтобы их можно было рассматривать как совместимые цели для запуска приложений Android, но ваше приложение может согласиться на их поддержку, что сделает ваше приложение доступным в большем количестве мест.
Подключение
Обновление Android 15 предоставляет вашему приложению доступ к новейшим достижениям в области коммуникационных и беспроводных технологий.
Спутниковая поддержка
Android 15 продолжает расширять поддержку платформы для спутниковой связи и включает в себя некоторые элементы пользовательского интерфейса, обеспечивающие единообразный пользовательский опыт в сфере спутниковой связи.
Приложения могут использовать ServiceState.isUsingNonTerrestrialNetwork() для определения того, когда устройство подключено к спутнику, что дает им больше информации о том, почему все сетевые службы могут быть недоступны. Кроме того, Android 15 обеспечивает поддержку приложений SMS и MMS, а также предустановленных приложений RCS для использования спутниковой связи для отправки и получения сообщений.

Более плавная работа NFC
Android 15 正在努力打造更顺畅、更可靠的感应式付款体验,同时继续支持 Android 强大的 NFC 应用生态系统。在受支持的设备上,应用可以请求 NfcAdapter 进入观察模式,在该模式下,设备会监听但不会响应 NFC 读卡器,并将应用的 NFC 服务 PollingFrame
对象发送以进行处理。PollingFrame 对象可用于在与 NFC 读卡器进行首次通信之前进行身份验证,在许多情况下,这支持一触式交易。
此外,应用可以在受支持的设备上注册过滤器,以便在有轮询循环活动时收到通知,从而能够与多个感知 NFC 的应用顺畅运行。
Роль кошелька
Android 15 引入了钱包角色,可与用户的首选钱包应用更紧密地集成。此角色会取代 NFC 默认的感应式付款设置。用户可以前往设置 > 应用 > 默认应用,管理钱包角色持有者。
在为在付款类别中注册的 AID 路由 NFC 感应式付款时,系统会使用钱包角色。点按操作始终会转到 Google 钱包角色持有者,除非有已注册相同 AID 的其他应用在前台运行。
此角色还用于确定“Google 钱包”快速访问功能块在启用后应显示在何处。将角色设为“无”时,“快速访问”功能块不可用,并且支付类别 NFC 点按仅传送到前台应用。
Безопасность
Android 15 помогает повысить безопасность вашего приложения, защитить его данные и предоставить пользователям больше прозрачности и контроля над своими данными. Подробнее о том, что мы делаем для улучшения защиты пользователей и защиты вашего приложения от новых угроз, смотрите в докладе « Защита безопасности пользователей на Android» на конференции Google I/O.
Интеграция менеджера учетных данных с функцией автозаполнения.
Начиная с Android 15, разработчики могут связывать определенные представления, такие как поля имени пользователя или пароля, с запросами диспетчера учетных данных , что упрощает предоставление индивидуального пользовательского опыта во время процесса входа. Когда пользователь фокусируется на одном из этих представлений, соответствующий запрос отправляется в Credential Manager. Полученные учетные данные объединяются между поставщиками и отображаются в резервных пользовательских интерфейсах автозаполнения, таких как встроенные или раскрывающиеся предложения. Библиотека Jetpack androidx.credentials является предпочтительной конечной точкой для разработчиков и скоро будет доступна для дальнейшего улучшения этой функции в Android 15 и более поздних версиях.
Интегрируйте регистрацию и вход в систему одним касанием с использованием биометрических данных.
Credential Manager将生物识别提示集成到凭据创建过程中 和登录流程,这样提供商就无需管理 生物识别提示。因此,凭据提供程序只需专注于创建和获取流程的结果,并辅以生物识别流程结果。这一简化的流程创建了更高效、更精简的凭据 创建和检索过程。
Управление ключами для сквозного шифрования
我们将在 Android 15 中引入 E2eeContactKeysManager,它通过提供用于存储加密公钥的操作系统级 API,有助于在 Android 应用中实现端到端加密 (E2EE)。
E2eeContactKeysManager 旨在与平台通讯录应用集成,以便用户集中管理和验证通讯录联系人的公钥。
Проверка прав доступа к URI контента
В Android 15 представлен набор API, которые выполняют проверку разрешений для URI контента:
-
Context.checkContentUriPermissionFull: выполняет полную проверку разрешений для URI контента. - Атрибут манифеста
ActivityrequireContentUriPermissionFromCaller: обеспечивает соблюдение указанных разрешений для предоставленных URI контента при запуске действия. - Класс
ComponentCallerдля вызывающихActivity: представляет приложение, запустившее действие.
Доступность
В Android 15 добавлены функции, улучшающие доступность для пользователей.
Улучшенный шрифт Брайля
在 Android 15 中,我们让 TalkBack 能够支持通过 USB 和安全蓝牙使用 HID 标准的盲文显示屏。
此标准与鼠标和键盘使用的标准非常相似,将有助于 Android 随着时间的推移支持更多类型的盲文显示屏。
Интернационализация
Android 15 добавляет функции и возможности, которые улучшают пользовательский опыт при использовании устройства на разных языках.
CJK переменный шрифт
Начиная с Android 15, файл шрифта для китайского, японского и корейского (CJK) языков NotoSansCJK теперь является переменным шрифтом. Вариативные шрифты открывают возможности для творческой типографики на языках CJK. Дизайнеры могут исследовать более широкий спектр стилей и создавать визуально яркие макеты, которые раньше было трудно или невозможно реализовать.

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

JUSTIFICATION_MODE_NONE . 
JUSTIFICATION_MODE_NONE . 
JUSTIFICATION_MODE_INTER_WORD . 
JUSTIFICATION_MODE_INTER_WORD . 
JUSTIFICATION_MODE_INTER_CHARACTER . 
JUSTIFICATION_MODE_INTER_CHARACTER .Автоматическая настройка переноса строки
Android начал поддерживать разрывы строк на основе фраз для японского и корейского языков в Android 13 (уровень API 33). Однако хотя разрывы строк на основе фраз улучшают читаемость коротких строк текста, они плохо работают с длинными строками текста. В Android 15 приложения могут применять разрывы строк на основе фраз только для коротких строк текста, используя параметр LINE_BREAK_WORD_STYLE_AUTO . Эта опция выбирает лучший вариант стиля слова для текста.
Для коротких строк текста используются разрывы строк на основе фраз, которые работают так же, как LINE_BREAK_WORD_STYLE_PHRASE , как показано на следующем рисунке:

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

LINE_BREAK_WORD_STYLE_AUTO не применяет стиль слов с разрывом строки, чтобы улучшить читаемость текста. Это то же самое, что применить LINE_BREAK_WORD_STYLE_NONE .Дополнительный японский шрифт хентайгана
In Android 15, a font file for old Japanese Hiragana (known as Hentaigana) is bundled by default. The unique shapes of Hentaigana characters can add a distinctive flair to artwork or design while also helping to preserve accurate transmission and understanding of ancient Japanese documents.
VideoLAN 圆锥图标 版权所有 (c) 1996-2010 VideoLAN。任何人都可以使用此徽标或修改版徽标来提及 VideoLAN 项目或 VideoLAN 团队开发的任何产品,但这并不表示该项目对其表示认可。
Vulkan 和 Vulkan 徽标是 Khronos Group Inc.的注册商标。
OpenGL 是注册商标,OpenGL ES 徽标是 Hewlett Packard Enterprise 的商标,已获得 Khronos 的许可。