Платформа Android 15 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения в поведении применяются ко всем приложениям, работающим на Android 15, независимо от targetSdkVersion . Вам следует протестировать свое приложение, а затем внести необходимые изменения для корректной поддержки этих изменений, где это применимо.
Обязательно ознакомьтесь также со списком изменений в поведении, которые затрагивают только приложения, ориентированные на Android 15 .
Основная функциональность
Android 15 изменяет или расширяет различные основные возможности системы Android.
Изменения в состоянии пакета остановлены.
Целью состояния пакета FLAG_STOPPED (которое пользователи могут использовать в сборках AOSP, нажав и удерживая значок приложения и выбрав «Принудительно остановить») всегда было сохранение приложений в этом состоянии до тех пор, пока пользователь явно не удалит приложение из этого состояния напрямую. запуск приложения или косвенное взаимодействие с приложением (через общий доступ или виджет, выбор приложения в качестве живых обоев и т. д.). В Android 15 мы обновили поведение системы, чтобы оно соответствовало предполагаемому поведению. Приложения следует выводить из остановленного состояния только прямым или косвенным действием пользователя.
Для поддержки предполагаемого поведения, в дополнение к существующим ограничениям, система также отменяет все ожидающие намерения, когда приложение переходит в состояние остановки на устройстве под управлением Android 15. Когда действия пользователя выводят приложение из состояния остановки, трансляция ACTION_BOOT_COMPLETED доставлено в приложение, предоставляя возможность перерегистрировать любые ожидающие намерения.
Вы можете вызвать новый метод ApplicationStartInfo.wasForceStopped() , чтобы подтвердить, было ли приложение переведено в состояние остановлено.
Поддержка страниц размером 16 КБ
从历史上看,Android 仅支持 4 KB 内存页面大小,这优化了系统内存性能,以适应 Android 设备通常拥有的平均总内存量。从 Android 15 开始,AOSP 支持配置为使用 16 KB 页面大小的设备(16 KB 设备)。如果您的应用直接或通过 SDK 间接使用任何 NDK 库,则需要重新构建应用,才能在这些 16 KB 设备上运行。
随着设备制造商不断制造出具有更大物理内存 (RAM) 的设备,许多此类设备将采用 16 KB(最终甚至更大)的页面大小来优化设备性能。添加对 16 KB 页面大小设备的支持,可让您的应用在这些设备上运行,并帮助您的应用受益于相关的性能改进。如果不重新编译,应用将无法在未来 Android 版本的 16 KB 设备上运行。
为帮助您为应用添加支持,我们提供了相关指南,介绍了如何检查应用是否受到影响、如何重新构建应用(如果适用),以及如何使用模拟器(包括 Android 模拟器的 Android 15 系统映像)在 16 KB 环境中测试应用。
Преимущества и повышение производительности
配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:
- 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
- 应用启动期间的功耗降低:平均降低了 4.56%
- 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
- 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)
这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。
Проверьте, не затронуто ли ваше приложение
Если ваше приложение использует нативный код , вам следует пересобрать его с поддержкой устройств с памятью 16 КБ . Если вы не уверены, использует ли ваше приложение нативный код, вы можете использовать APK Analyzer для его определения, а затем проверить выравнивание сегментов ELF для любых обнаруженных общих библиотек . Android Studio также предоставляет функции, помогающие автоматически обнаруживать проблемы выравнивания .
Если ваше приложение использует только код, написанный на языке программирования Java или Kotlin, включая все библиотеки и SDK, то оно уже поддерживает устройства с 16 КБ. Тем не менее, мы рекомендуем протестировать приложение в среде с 16 КБ, чтобы убедиться в отсутствии непредвиденных регрессий в его поведении.
Для поддержки приватного пространства некоторым приложениям необходимы изменения.
Личное пространство — это новая функция Android 15, которая позволяет пользователям создавать на своем устройстве отдельное пространство, где они могут хранить конфиденциальные приложения вдали от посторонних глаз под дополнительным уровнем аутентификации. Поскольку приложения в личном пространстве имеют ограниченную видимость, некоторым типам приложений необходимо предпринять дополнительные шаги, чтобы иметь возможность видеть приложения в личном пространстве пользователя и взаимодействовать с ними.
Все приложения
Поскольку приложения в личном пространстве хранятся в отдельном профиле пользователя, аналогично рабочим профилям , приложения не должны предполагать, что любые установленные копии их приложений, которых нет в основном профиле, находятся в рабочем профиле. Если в вашем приложении есть логика, связанная с приложениями рабочего профиля, которые делают это предположение, вам необходимо настроить эту логику.
Медицинские приложения
Когда пользователь блокирует личное пространство, все приложения в нем останавливаются, и эти приложения не могут выполнять приоритетные или фоновые действия, включая показ уведомлений. Такое поведение может критически повлиять на использование и функционирование медицинских приложений, установленных в личном пространстве.
При настройке частного пространства пользователи предупреждаются о том, что частное пространство не подходит для приложений, которым необходимо выполнять критически важные действия в приоритетном или фоновом режиме, например показывать уведомления от медицинских приложений. Однако приложения не могут определить, используются ли они в личном пространстве, поэтому они не могут показать пользователю предупреждение в этом случае.
По этим причинам, если вы разрабатываете медицинское приложение, проанализируйте, как эта функция может повлиять на ваше приложение, и примите соответствующие меры (например, проинформируйте пользователей о том, что не следует устанавливать ваше приложение в личном пространстве), чтобы избежать нарушения критически важных функций приложения.
Приложения для запуска
Если вы разрабатываете приложение запуска, вам необходимо сделать следующее, прежде чем приложения в личном пространстве станут видимыми:
- Ваше приложение должно быть назначено в качестве приложения запуска по умолчанию для устройства, то есть иметь роль
ROLE_HOME. - Ваше приложение должно объявить обычное разрешение
ACCESS_HIDDEN_PROFILESв файле манифеста вашего приложения .
Приложения запуска, объявляющие разрешение ACCESS_HIDDEN_PROFILES , должны обрабатывать следующие случаи использования частного пространства:
- Ваше приложение должно иметь отдельный контейнер запуска для приложений, установленных в личном пространстве. Используйте метод
getLauncherUserInfo(), чтобы определить, какой тип профиля пользователя обрабатывается. - Пользователь должен иметь возможность скрывать и показывать контейнер частного пространства.
- Пользователь должен иметь возможность блокировать и разблокировать контейнер личного пространства. Используйте метод
requestQuietModeEnabled()чтобы заблокировать (передавtrue) или разблокировать (передавfalse) личное пространство. Когда приложение заблокировано, никакие приложения в контейнере частного пространства не должны быть видимыми или обнаруживаемыми с помощью таких механизмов, как поиск. Ваше приложение должно зарегистрировать получателя для широковещательных рассылок
ACTION_PROFILE_AVAILABLEиACTION_PROFILE_UNAVAILABLEи обновить пользовательский интерфейс в вашем приложении при изменении заблокированного или разблокированного состояния контейнера частного пространства. Обе эти трансляции включаютEXTRA_USER, который ваше приложение может использовать для обращения к пользователю частного профиля.Вы также можете использовать метод
isQuietModeEnabled()чтобы проверить, заблокирован ли профиль частного пространства или нет.
Приложения из магазина приложений
Личное пространство включает кнопку «Установить приложения», которая запускает неявное намерение установить приложения в личное пространство пользователя. Чтобы ваше приложение могло получить это неявное намерение, объявите <intent-filter> в файле манифеста вашего приложения с <category> CATEGORY_APP_MARKET .
Удалён шрифт эмодзи на основе PNG.
我们移除了基于 PNG 的旧版表情符号字体文件 (NotoColorEmojiLegacy.ttf),只保留了基于矢量的文件。从 Android 13(API 级别 33)开始,系统表情符号渲染程序使用的表情符号字体文件已从基于 PNG 的文件更改为基于矢量的文件。出于兼容性原因,系统在 Android 13 和 14 中保留了旧版字体文件,以便具有自己的字体渲染程序的应用在能够升级之前继续使用旧版字体文件。
如需检查您的应用是否受到影响,请在应用的代码中搜索对 NotoColorEmojiLegacy.ttf 文件的引用。
您可以通过多种方式自适应应用:
- 使用平台 API 进行文本渲染。您可以将文本渲染到基于位图的
Canvas,并在必要时使用该Canvas获取原始图片。 - 为您的应用添加 COLRv1 字体支持。FreeType 开源库在 2.13.0 版及更高版本中支持 COLRv1。
- 作为最后的手段,您可以将旧版表情符号字体文件 (
NotoColorEmoji.ttf) 捆绑到 APK 中,但在这种情况下,您的应用将缺少最新的表情符号更新。如需了解详情,请参阅 Noto Emoji GitHub 项目页面。
Повышена минимальная целевая версия SDK с 23 до 24.
Android 15 基于
在 Android 14 中进行的更改,并扩展了
安全性。在 Android 15 中,
无法安装低于 24 的 targetSdkVersion。
要求应用符合现代 API 级别有助于确保更好的安全性和
保护隐私。
恶意软件通常会以较低的 API 级别为目标平台,以绕过安全和隐私
更高的 Android 版本中引入的保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 15 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示如下所示的消息:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7
在升级到 Android 15 的设备上,targetSdkVersion 级别较低的任何应用
安装在 Google Play 上
如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:
adb install --bypass-low-target-sdk-block FILENAME.apk
Безопасность и конфиденциальность
В Android 15 представлены надежные меры по борьбе с мошенничеством с использованием одноразовых паролей (OTP) и защите конфиденциального контента пользователя, уделяя особое внимание усилению службы прослушивания уведомлений и защите совместного использования экрана. Ключевые улучшения включают в себя удаление одноразовых паролей из уведомлений, доступных ненадежным приложениям, скрытие уведомлений во время совместного использования экрана и защиту действий приложений при публикации одноразовых паролей. Эти изменения направлены на защиту конфиденциального контента пользователя от несанкционированных действий.
Разработчикам необходимо учитывать следующее, чтобы обеспечить совместимость своих приложений с изменениями в Android 15:
Редактирование OTP
Android не позволит ненадежным приложениям, реализующим NotificationListenerService , читать неотредактированный контент из уведомлений, в которых был обнаружен OTP. Доверенные приложения, такие как ассоциации диспетчера сопутствующих устройств, освобождаются от этих ограничений.
Защита совместного использования экрана
- Содержимое уведомлений скрывается во время сеансов совместного использования экрана, чтобы сохранить конфиденциальность пользователя. Если приложение реализует
setPublicVersion(), Android показывает общедоступную версию уведомления, которая служит заменой уведомления в небезопасных контекстах. В противном случае содержимое уведомления будет отредактировано без какого-либо дополнительного контекста. - Конфиденциальный контент, например ввод пароля, скрыт от удаленных зрителей, чтобы предотвратить раскрытие конфиденциальной информации пользователя.
- Действия приложений, которые публикуют уведомления во время совместного использования экрана, где был обнаружен OTP, будут скрыты. Содержимое приложения скрыто от удаленного просмотра при запуске.
- Помимо автоматической идентификации конфиденциальных полей в Android, разработчики могут вручную помечать части своего приложения как конфиденциальные с помощью
setContentSensitivity, который скрыт от удаленных зрителей во время совместного использования экрана. - Разработчики могут включить параметр « Отключить защиту общего доступа к экрану» в разделе «Параметры разработчика» , чтобы освободиться от защиты общего доступа к экрану в целях демонстрации или тестирования. Системный рекордер экрана по умолчанию освобожден от этих изменений, поскольку записи остаются на устройстве.
В Android 15 представлены надежные меры по борьбе с мошенничеством с использованием одноразовых паролей (OTP) и защите конфиденциального контента пользователя, уделяя особое внимание усилению службы прослушивания уведомлений и защите совместного использования экрана. Ключевые улучшения включают в себя удаление одноразовых паролей из уведомлений, доступных ненадежным приложениям, скрытие уведомлений во время совместного использования экрана и защиту действий приложений при публикации одноразовых паролей. Эти изменения направлены на защиту конфиденциального контента пользователя от несанкционированных действий.
Разработчикам необходимо учитывать следующее, чтобы их приложения были совместимы с изменениями в Android 15:
Редактирование OTP
Android не позволит ненадежным приложениям, реализующим NotificationListenerService , читать неотредактированный контент из уведомлений, в которых был обнаружен OTP. Доверенные приложения, такие как ассоциации диспетчера сопутствующих устройств, освобождаются от этих ограничений.
Защита совместного использования экрана
- Содержимое уведомлений скрывается во время сеансов совместного использования экрана, чтобы сохранить конфиденциальность пользователя. Если приложение реализует
setPublicVersion(), Android показывает общедоступную версию уведомления, которая служит заменой уведомления в небезопасных контекстах. В противном случае содержимое уведомления будет отредактировано без какого-либо дополнительного контекста. - Конфиденциальный контент, например ввод пароля, скрыт от удаленных зрителей, чтобы предотвратить раскрытие конфиденциальной информации пользователя.
- Действия приложений, которые публикуют уведомления во время совместного использования экрана, где был обнаружен OTP, будут скрыты. Содержимое приложения скрыто от удаленного просмотра при запуске.
- Помимо автоматической идентификации конфиденциальных полей в Android, разработчики могут вручную помечать части своего приложения как конфиденциальные с помощью
setContentSensitivity, который скрыт от удаленных зрителей во время совместного использования экрана. - Разработчики могут включить параметр « Отключить защиту общего доступа к экрану» в разделе «Параметры разработчика» , чтобы освободиться от защиты общего доступа к экрану в целях демонстрации или тестирования. Системный рекордер экрана по умолчанию освобожден от этих изменений, поскольку записи остаются на устройстве.
Камера и медиа
В Android 15 внесены следующие изменения в работу камеры и мультимедийных приложений.
При достижении пределов ресурсов воспроизведение аудио напрямую или с выгрузкой ресурсов становится недействительным при воспроизведении аудиодорожек, ранее открытых в режиме прямого или выгруженного воспроизведения.
До Android 15, если приложение запрашивало прямое воспроизведение звука или разгрузку звука, пока другое приложение воспроизводило звук и были достигнуты ограничения ресурсов, приложение не могло открыть новый AudioTrack .
Начиная с Android 15, когда приложение запрашивает прямое воспроизведение или воспроизведение с разгрузкой и достигаются ограничения ресурсов, система аннулирует все открытые в данный момент объекты AudioTrack , которые препятствуют выполнению запроса на новую дорожку.
(Прямая аудиодорожка и аудиодорожки с выгрузкой обычно открываются для воспроизведения сжатых аудиоформатов. Общие случаи использования прямого воспроизведения аудио включают потоковое воспроизведение закодированного звука через HDMI на телевизор. Дорожки с разгрузкой обычно используются для воспроизведения сжатого аудио на мобильном устройстве с аппаратным DSP. ускорение.)
Пользовательский опыт и пользовательский интерфейс системы
В Android 15 внесены некоторые изменения, призванные обеспечить более согласованный и интуитивно понятный пользовательский интерфейс.
Функция предиктивной анимации возврата включена для приложений, которые дали на это согласие.
从 Android 15 开始,预测性返回动画的开发者选项已被移除。现在,如果应用已完全或在 activity 级别选择启用预测性返回手势,则系统会为其显示“返回主屏幕”“跨任务”和“跨 activity”等系统动画。如果您的应用受到了影响,请执行以下操作:
- 确保您的应用已正确迁移,以使用预测性返回手势。
- 确保 fragment 转场效果可与预测性返回导航搭配使用。
- 请弃用动画和框架过渡,改用动画和 androidx 过渡。
- 从
FragmentManager不认识的返回堆栈迁移。请改用由FragmentManager或 Navigation 组件管理的返回堆栈。
Виджеты отключаются, когда пользователь принудительно останавливает приложение.
Если пользователь принудительно останавливает приложение на устройстве под управлением Android 15, система временно отключает все виджеты приложения. Виджеты выделены серым цветом, и пользователь не может с ними взаимодействовать. Это связано с тем, что, начиная с Android 15, система отменяет все ожидающие намерения приложения, когда приложение принудительно остановлено.
Система повторно включает эти виджеты при следующем запуске приложения пользователем.
Дополнительные сведения см. в разделе Изменения состояния остановки пакета .
Индикатор состояния медиапроектора оповещает пользователей о совместном использовании экрана, трансляции и записи.
Эксплойты проецирования экрана раскрывают личные данные пользователей, такие как финансовая информация, поскольку пользователи не осознают, что экран их устройства используется совместно.
Для приложений, работающих на устройствах с Android 15 QPR1 или более поздней версии, большая и заметная строка состояния предупреждает пользователей о любом текущем проецировании экрана. Пользователи могут коснуться чипа, чтобы запретить совместное использование, трансляцию или запись своего экрана. Кроме того, проецирование экрана автоматически прекращается, когда экран устройства заблокирован.

检查您的应用是否受到影响
默认情况下,您的应用会包含状态栏条状标签,并会在锁定屏幕激活时自动暂停屏幕投影。
如需详细了解如何针对这些用例测试应用,请参阅状态栏条状标签和自动停止。
Фоновые ограничения доступа к сети
В Android 15 приложения, которые запускают сетевой запрос вне допустимого жизненного цикла процесса , получают исключение. Обычно это UnknownHostException или другое исключение IOException , связанное с сокетом. Сетевые запросы, которые происходят вне допустимого жизненного цикла, обычно происходят из-за того, что приложения по незнанию продолжают выполнять сетевой запрос даже после того, как приложение больше не активно.
Чтобы смягчить это исключение, убедитесь, что ваши сетевые запросы учитывают жизненный цикл и отменяются после выхода из действительного жизненного цикла процесса, используя компоненты, учитывающие жизненный цикл . Если важно, чтобы сетевой запрос выполнялся даже тогда, когда пользователь покидает приложение, рассмотрите возможность планирования сетевого запроса с помощью WorkManager или продолжения видимой для пользователя задачи с помощью Foreground Service .
Амортизация
С каждым релизом некоторые API Android могут устаревать или нуждаться в рефакторинге для улучшения пользовательского опыта разработчиков или поддержки новых возможностей платформы. В таких случаях мы официально объявляем устаревшие API устаревшими и рекомендуем разработчикам использовать альтернативные API.
«Устаревание» означает, что мы прекратили официальную поддержку этих API, но они по-прежнему будут доступны разработчикам. Чтобы узнать больше о важных устаревших функциях в этом выпуске Android, см. страницу «Устаревание» .