Изменения поведения: все приложения

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

Обязательно ознакомьтесь со списком изменений поведения, которые касаются только приложений, предназначенных для Android 15 .

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

Android 15 изменяет или расширяет различные основные возможности системы Android.

Изменения в состоянии остановленного пакета

软件包 FLAG_STOPPED 状态(用户可以通过在 AOSP build 中长按应用图标并选择“强制停止”来启用此状态)的用途一直是让应用保持在此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、将应用选择为动态壁纸等)来明确将应用从此状态移除。在 Android 15 中,我们更新了系统行为,使其与此预期行为保持一致。应用应仅通过直接或间接的用户操作从停止状态移除。

为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态移除时,系统会将 ACTION_BOOT_COMPLETED 广播传送到应用,以便应用有机会重新注册所有待处理 intent。

您可以调用新的 ApplicationStartInfo.wasForceStopped() 方法来确认应用是否已进入停止状态。

Поддержка страниц размером 16 КБ

Исторически Android поддерживал страницы памяти размером всего 4 КБ, что оптимизировало производительность системной памяти для среднего объёма памяти, обычно используемого устройствами Android. Начиная с Android 15, AOSP поддерживает устройства, настроенные на использование страниц размером 16 КБ (устройства с 16 КБ). Если ваше приложение использует библиотеки NDK , напрямую или косвенно через SDK, вам потребуется пересобрать приложение для его работы на устройствах с 16 КБ.

Поскольку производители устройств продолжают выпускать устройства с большим объёмом физической памяти (ОЗУ), многие из них будут использовать размер страницы 16 КБ (а в перспективе и больше) для оптимизации производительности. Добавление поддержки устройств с размером страницы 16 КБ позволит вашему приложению работать на этих устройствах и позволит использовать преимущества, связанные с повышением производительности. Без перекомпиляции приложения не будут работать на устройствах с 16 КБ в будущих версиях Android.

Чтобы помочь вам добавить поддержку для вашего приложения, мы предоставили рекомендации о том, как проверить, затронуто ли ваше приложение , как перестроить ваше приложение (если это применимо) и как протестировать ваше приложение в среде 16 КБ с помощью эмуляторов (включая образы системы Android 15 для эмулятора Android).

优势和性能提升

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

  • Сокращение времени запуска приложений, когда система испытывает нехватку памяти: в среднем на 3,16 % меньше, с более значительными улучшениями (до 30 %) для некоторых протестированных нами приложений.
  • Снижение энергопотребления при запуске приложения: в среднем снижение на 4,56 %.
  • Более быстрый запуск камеры: в среднем на 4,48 % более быстрый горячий запуск и в среднем на 6,60 % более быстрый холодный запуск.
  • Улучшено время загрузки системы: в среднем улучшено на 8% (приблизительно 950 миллисекунд).

Эти улучшения основаны на нашем первоначальном тестировании, и результаты на реальных устройствах, вероятно, будут отличаться. По мере продолжения тестирования мы предоставим дополнительный анализ потенциальных преимуществ для приложений.

检查您的应用是否受到影响

Если ваше приложение использует нативный код , вам следует пересобрать его с поддержкой устройств с памятью 16 КБ . Если вы не уверены, использует ли ваше приложение нативный код, вы можете использовать APK Analyzer для его определения, а затем проверить выравнивание сегментов ELF для любых обнаруженных общих библиотек . Android Studio также предоставляет функции, помогающие автоматически обнаруживать проблемы выравнивания .

Если ваше приложение использует только код, написанный на языке программирования Java или Kotlin, включая все библиотеки и SDK, то оно уже поддерживает устройства с 16 КБ. Тем не менее, мы рекомендуем протестировать приложение в среде с 16 КБ, чтобы убедиться в отсутствии непредвиденных регрессий в его поведении.

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

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

Все приложения

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

Медицинские приложения

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

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

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

Приложения для запуска

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

  1. Ваше приложение должно быть назначено в качестве приложения запуска по умолчанию для устройства, то есть иметь роль ROLE_HOME .
  2. Ваше приложение должно объявить обычное разрешение ACCESS_HIDDEN_PROFILES в файле манифеста вашего приложения .

Приложения запуска, объявляющие разрешение ACCESS_HIDDEN_PROFILES , должны обрабатывать следующие случаи использования частного пространства:

  1. Ваше приложение должно иметь отдельный контейнер запуска для приложений, установленных в личном пространстве. Используйте метод getLauncherUserInfo() , чтобы определить, какой тип профиля пользователя обрабатывается.
  2. Пользователь должен иметь возможность скрывать и показывать контейнер частного пространства.
  3. Пользователь должен иметь возможность блокировать и разблокировать контейнер личного пространства. Используйте метод requestQuietModeEnabled() чтобы заблокировать (передав true ) или разблокировать (передав false ) личное пространство.
  4. Когда приложение заблокировано, никакие приложения в контейнере частного пространства не должны быть видимыми или обнаруживаемыми с помощью таких механизмов, как поиск. Ваше приложение должно зарегистрировать получателя для широковещательных рассылок 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) 欺诈并保护用户的敏感内容,重点是增强通知监听器服务和屏幕共享保护措施。主要增强功能包括从可供不可信应用访问的通知中隐去 OTP、在屏幕共享期间隐藏通知,以及在发布 OTP 时保护应用 activity。这些变更旨在保护用户的敏感内容,使其免受未经授权的操作者的侵害。

开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容:

动态密码隐去

Android 会阻止实现 NotificationListenerService 的不受信任应用读取已检测到 OTP 的通知中的未隐去的内容。配套设备管理器关联等受信任应用不受这些限制。

屏幕共享保护

  • 在屏幕共享会话期间,系统会隐藏通知内容,以保护用户的隐私。如果应用实现了 setPublicVersion(),Android 会显示通知的公开版本,该版本在不安全情境中用作替换通知。否则,系统会隐去通知内容,不提供任何其他背景信息。
  • 系统会向远程观看者隐藏密码输入等敏感内容,以防止泄露用户的敏感信息。
  • 如果在屏幕共享期间检测到动态密码,系统会隐藏在该时间段内发布通知的应用的活动。应用内容在启动时会向远程查看器隐藏。
  • 除了 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.

Deprecation means that we've ended official support for the APIs, but they will continue to remain available to developers. Чтобы узнать больше о заметных остепниках в этом выпуске Android, см. На странице деформации .