Платформа Android 16 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения поведения применяются ко всем приложениям , работающим на Android 16, независимо от targetSdkVersion
. Вам следует протестировать свое приложение, а затем при необходимости изменить его для поддержки этих изменений, где это применимо.
Обязательно ознакомьтесь также со списком изменений поведения, которые влияют только на приложения, ориентированные на Android 16 .
Основная функциональность
Android 16 включает следующие изменения, которые изменяют или расширяют различные основные возможности системы Android.
Оптимизация квот JobScheduler
Начиная с Android 16, мы корректируем квоту времени выполнения обычных и ускоренных заданий на основе следующих факторов:
- В каком резервном сегменте приложения находится приложение : в Android 16 активные резервные сегменты начнут обеспечиваться щедрой квотой времени выполнения.
- Если задание начинает выполнение, когда приложение находится в верхнем состоянии : в Android 16 задания запускаются, пока приложение видно пользователю, и продолжаются после того, как приложение становится невидимым, будут соответствовать квоте времени выполнения задания.
- Если задание выполняется во время работы службы переднего плана : в Android 16 задания, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания. Если вы используете задания для передачи данных, инициируемой пользователем, рассмотрите возможность использования вместо этого заданий передачи данных, инициируемых пользователем .
Это изменение влияет на задачи, запланированные с помощью WorkManager, JobScheduler и DownloadManager. Чтобы выяснить, почему задание было остановлено, мы рекомендуем записать причину, по которой ваше задание было остановлено, вызвав WorkInfo.getStopReason()
(для заданий JobScheduler вызовите JobParameters.getStopReason()
).
Дополнительные сведения о рекомендациях по оптимальному использованию аккумулятора см. в руководстве по оптимизации использования аккумулятора для API планирования задач .
Мы также рекомендуем использовать новый API JobScheduler#getPendingJobReasonsHistory
представленный в Android 16, чтобы понять, почему задание не выполнено.
Тестирование
Чтобы проверить поведение вашего приложения, вы можете включить переопределение определенных оптимизаций квоты заданий, пока приложение работает на устройстве Android 16.
Чтобы отключить принудительное применение «верхнего состояния будет соответствовать квоте выполнения задания», выполните следующую команду adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
Чтобы отключить принудительное выполнение «заданий, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания», выполните следующую команду adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
Чтобы протестировать поведение определенного резервного сегмента приложения, вы можете настроить резервный сегмент вашего приложения с помощью следующей команды adb
:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
Чтобы понять, в каком сегменте ожидания находится ваше приложение, вы можете получить резервный сегмент вашего приложения, используя следующую команду adb
:
adb shell am get-standby-bucket APP_PACKAGE_NAME
Причина прекращения пустых рабочих мест
Прерванное задание происходит, когда объект JobParameters
связанный с заданием, был удален, но JobService#jobFinished(JobParameters, boolean)
не был вызван для сигнала о завершении задания. Это указывает на то, что задание может выполняться и перепланироваться без ведома приложения.
Приложения, использующие JobScheduler, не поддерживают строгую ссылку на объект JobParameters
, и тайм-ауту теперь будет присвоена новая причина остановки задания STOP_REASON_TIMEOUT_ABANDONED
вместо STOP_REASON_TIMEOUT
.
Если новые причины прерванной остановки возникают часто, система предпримет меры по смягчению последствий, чтобы снизить частоту выполнения заданий.
Приложения должны использовать новую причину остановки, чтобы обнаруживать и сокращать количество заброшенных заданий.
Если вы используете WorkManager, AsyncTask или DownloadManager, на вас это не повлияет, поскольку эти API управляют жизненным циклом задания от имени вашего приложения.
Полное прекращение поддержки JobInfo#setImportantWhileForeground
The JobInfo.Builder#setImportantWhileForeground(boolean)
method indicates the importance of a job while the scheduling app is in the
foreground or when temporarily exempted from background restrictions.
This method has been deprecated since Android 12 (API level 31). Starting in Android 16, it no longer functions effectively and calling this method will be ignored.
This removal of functionality also applies to
JobInfo#isImportantWhileForeground()
. Starting in Android
16, if the method is called, the method returns false
.
Упорядоченная область приоритета широковещательной передачи больше не является глобальной.
Приложениям Android разрешено определять приоритеты приемников вещания, чтобы контролировать порядок, в котором получатели получают и обрабатывают трансляцию. Для получателей, объявленных в манифесте, приложения могут использовать атрибут android:priority
для определения приоритета, а для получателей, зарегистрированных в контексте, приложения могут использовать API IntentFilter#setPriority()
для определения приоритета. При отправке широковещательной рассылки система доставляет ее получателям в порядке их приоритета, от самого высокого к самому низкому.
В Android 16 порядок широковещательной доставки с использованием атрибута android:priority
или IntentFilter#setPriority()
между различными процессами не гарантируется. Приоритеты вещания будут соблюдаться только в рамках одного и того же процесса подачи заявки, а не во всех процессах.
Кроме того, приоритеты вещания будут автоматически ограничены диапазоном ( SYSTEM_LOW_PRIORITY
+ 1, SYSTEM_HIGH_PRIORITY
– 1). Только системным компонентам будет разрешено устанавливать SYSTEM_LOW_PRIORITY
, SYSTEM_HIGH_PRIORITY
в качестве приоритета широковещания.
Ваше приложение может пострадать, если оно выполняет одно из следующих действий:
- Ваше приложение объявило несколько процессов с одним и тем же намерением широковещания и ожидает получения этих намерений в определенном порядке в зависимости от приоритета.
- Процесс вашего приложения взаимодействует с другими процессами и ожидает получения широковещательного намерения в определенном порядке.
Если процессам необходимо координировать друг друга, им следует взаимодействовать, используя другие каналы координации.
Внутренние изменения АРТ
Android 16 includes the latest updates to the Android Runtime (ART) that improve the Android Runtime's (ART's) performance and provide support for additional Java features. Through Google Play System updates, these improvements are also available to over a billion devices running Android 12 (API level 31) and higher.
As these changes are released, libraries and app code that rely on internal structures of ART might not work correctly on devices running Android 16, along with earlier Android versions that update the ART module through Google Play system updates.
Relying on internal structures (such as non-SDK interfaces) can always lead to compatibility problems, but it's particularly important to avoid relying on code (or libraries containing code) that leverages internal ART structures, since ART changes aren't tied to the platform version the device is running on and they go out to over a billion devices through Google Play system updates.
All developers should check whether their app is impacted by testing their apps thoroughly on Android 16. In addition, check the known issues to see if your app depends on any libraries that we've identified that rely on internal ART structures. If you do have app code or library dependencies that are affected, seek public API alternatives whenever possible and request public APIs for new use cases by creating a feature request in our issue tracker.
Режим совместимости размера страницы 16 КБ
Android 15 introduced support for 16 KB memory pages to optimize performance of the platform. Android 16 adds a compatibility mode, allowing some apps built for 4 KB memory pages to run on a device configured for 16 KB memory pages.
If Android detects that your app has 4 KB aligned memory pages, it
automatically uses compatibility mode and display a notification dialog to the
user. Setting the android:pageSizeCompat
property in the AndroidManifest.xml
to enable the backwards compatibility mode will prevent the display of the
dialog when your app launches. For best performance, reliability, and stability,
your app should still be 16 KB aligned. Check out
our recent blog post
on updating your apps to support 16 KB memory pages for more details.

Пользовательский опыт и системный интерфейс
Android 16 включает следующие изменения, призванные создать более последовательный и интуитивно понятный пользовательский интерфейс.
Отказ от деструктивных объявлений о доступности
Android 16 deprecates accessibility announcements, characterized by the use of
announceForAccessibility
or the dispatch of
TYPE_ANNOUNCEMENT
accessibility events. These can create
inconsistent user experiences for users of TalkBack and Android's screen reader,
and alternatives better serve a broader range of user needs across a variety of
Android's assistive technologies.
Examples of alternatives:
- For significant UI changes like window changes, use
Activity.setTitle(CharSequence)
andsetAccessibilityPaneTitle(java.lang.CharSequence)
. In Compose, useModifier.semantics { paneTitle = "paneTitle" }
- To inform the user of changes to critical UI, use
setAccessibilityLiveRegion(int)
. In Compose, useModifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
. These should be used sparingly as they may generate announcements every time a View is updated. - To notify users about errors, send an
AccessibilityEvent
of typeAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
and setAccessibilityNodeInfo#setError(CharSequence)
, or useTextView#setError(CharSequence)
.
The reference documentation for the deprecated
announceForAccessibility
API includes more details about
suggested alternatives.
Поддержка трехкнопочной навигации.
Android 16 brings predictive back support to the 3-button navigation for apps that have properly migrated to predictive back. Long-pressing the back button initiates a predictive back animation, giving you a preview of where the back swipe takes you.
This behavior applies across all areas of the system that support predictive back animations, including the system animations (back-to-home, cross-task, and cross-activity).
Форм-факторы устройств
Android 16 включает следующие изменения для приложений, проецируемых на дисплеи владельцами виртуальных устройств.
Переопределения владельца виртуального устройства
Владелец виртуального устройства — это доверенное или привилегированное приложение, которое создает виртуальное устройство и управляет им. Владельцы виртуальных устройств запускают приложения на виртуальном устройстве, а затем проецируют их на дисплей удаленного устройства, например персонального компьютера, устройства виртуальной реальности или автомобильной информационно-развлекательной системы. Владелец виртуального устройства находится на локальном устройстве, например мобильном телефоне.

Переопределения для каждого приложения
На устройствах под управлением Android 16 владельцы виртуальных устройств могут переопределять настройки приложений на выбранных виртуальных устройствах, которыми управляют владельцы виртуальных устройств. Например, чтобы улучшить макет приложения, владелец виртуального устройства может игнорировать ограничения ориентации, соотношения сторон и изменения размера при проецировании приложений на внешний дисплей.
Общие критические изменения
Поведение Android 16 может повлиять на пользовательский интерфейс вашего приложения на больших экранах, таких как автомобильные дисплеи или Chromebook, особенно на макетах, разработанных для небольших дисплеев в книжной ориентации. Чтобы узнать, как сделать приложение адаптивным для всех форм-факторов устройств, см. раздел «Об адаптивных макетах» .
Ссылки
Потоковая передача через сопутствующее приложение
Безопасность
Android 16 включает изменения, повышающие безопасность системы и помогающие защитить приложения и пользователей от вредоносных приложений.
Улучшена защита от атак с перенаправлением намерений.
Android 16 обеспечивает защиту по умолчанию от общих атак с перенаправлением Intent
с минимальной совместимостью и необходимыми изменениями разработчика.
Мы по умолчанию представляем решения по усилению безопасности для эксплойтов перенаправления Intent
. В большинстве случаев приложения, использующие намерения, обычно не сталкиваются с проблемами совместимости; мы собирали показатели на протяжении всего процесса разработки, чтобы отслеживать, в каких приложениях могут возникнуть сбои.
Перенаправление намерения в Android происходит, когда злоумышленник может частично или полностью контролировать содержимое намерения, используемого для запуска нового компонента в контексте уязвимого приложения, в то время как приложение-жертва запускает ненадежное намерение подуровня в дополнительном поле намерения («верхнего уровня»). Это может привести к тому, что приложение-злоумышленник запустит частные компоненты в контексте приложения-жертвы, инициирует привилегированные действия или получит URI-доступ к конфиденциальным данным, что потенциально может привести к краже данных и выполнению произвольного кода.
Отключить обработку перенаправления намерений
В Android 16 представлен новый API, который позволяет приложениям отказываться от защиты при запуске. Это может быть необходимо в определенных случаях, когда поведение безопасности по умолчанию мешает законным сценариям использования приложений.
Для приложений, компилируемых с использованием Android 16 SDK или более поздней версии.
Вы можете напрямую использовать метод removeLaunchSecurityProtection()
для объекта Intent.
val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent")
iSublevel?.removeLaunchSecurityProtection() // Opt out from hardening
iSublevel?.let { startActivity(it) }
Для приложений, компилируемых под Android 15 (уровень API 35) или ниже.
Хотя это и не рекомендуется, вы можете использовать отражение для доступа к методу removeLaunchSecurityProtection()
.
val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent", Intent::class.java)
try {
val removeLaunchSecurityProtection = Intent::class.java.getDeclaredMethod("removeLaunchSecurityProtection")
removeLaunchSecurityProtection.invoke(iSublevel)
} catch (e: Exception) {
// Handle the exception, e.g., log it
} // Opt-out from the security hardening using reflection
iSublevel?.let { startActivity(it) }
Возможности подключения
Android 16 включает следующие изменения в стеке Bluetooth для улучшения связи с периферийными устройствами.
Улучшенная обработка потерь по облигациям
Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
,Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
,Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
, Платформа Android 16 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения поведения применяются ко всем приложениям , работающим на Android 16, независимо от targetSdkVersion
. Вам следует протестировать свое приложение, а затем при необходимости изменить его для поддержки этих изменений, где это применимо.
Обязательно ознакомьтесь также со списком изменений поведения, которые влияют только на приложения, ориентированные на Android 16 .
Основная функциональность
Android 16 включает следующие изменения, которые изменяют или расширяют различные основные возможности системы Android.
Оптимизация квот JobScheduler
Начиная с Android 16, мы корректируем квоту времени выполнения обычных и ускоренных заданий на основе следующих факторов:
- В каком резервном сегменте приложения находится приложение : в Android 16 активные резервные сегменты начнут обеспечиваться щедрой квотой времени выполнения.
- Если задание начинает выполнение, когда приложение находится в верхнем состоянии : в Android 16 задания запускаются, пока приложение видно пользователю, и продолжаются после того, как приложение становится невидимым, будут соответствовать квоте времени выполнения задания.
- Если задание выполняется во время работы службы переднего плана : в Android 16 задания, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания. Если вы используете задания для передачи данных, инициируемой пользователем, рассмотрите возможность использования вместо этого заданий передачи данных, инициируемых пользователем .
Это изменение влияет на задачи, запланированные с помощью WorkManager, JobScheduler и DownloadManager. Чтобы выяснить, почему задание было остановлено, мы рекомендуем записать причину, по которой ваше задание было остановлено, вызвав WorkInfo.getStopReason()
(для заданий JobScheduler вызовите JobParameters.getStopReason()
).
Дополнительные сведения о рекомендациях по оптимальному использованию аккумулятора см. в руководстве по оптимизации использования аккумулятора для API планирования задач .
Мы также рекомендуем использовать новый API JobScheduler#getPendingJobReasonsHistory
представленный в Android 16, чтобы понять, почему задание не выполнено.
Тестирование
Чтобы проверить поведение вашего приложения, вы можете включить переопределение определенных оптимизаций квоты заданий, пока приложение работает на устройстве Android 16.
Чтобы отключить принудительное применение «верхнего состояния будет соответствовать квоте выполнения задания», выполните следующую команду adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
Чтобы отключить принудительное выполнение «заданий, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания», выполните следующую команду adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
Чтобы протестировать поведение определенного резервного сегмента приложения, вы можете настроить резервный сегмент вашего приложения с помощью следующей команды adb
:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
Чтобы понять, в каком сегменте ожидания находится ваше приложение, вы можете получить резервный сегмент вашего приложения, используя следующую команду adb
:
adb shell am get-standby-bucket APP_PACKAGE_NAME
Причина прекращения пустых рабочих мест
Прерванное задание происходит, когда объект JobParameters
связанный с заданием, был удален, но JobService#jobFinished(JobParameters, boolean)
не был вызван для сигнала о завершении задания. Это указывает на то, что задание может выполняться и перепланироваться без ведома приложения.
Приложения, использующие JobScheduler, не поддерживают строгую ссылку на объект JobParameters
, и тайм-ауту теперь будет присвоена новая причина остановки задания STOP_REASON_TIMEOUT_ABANDONED
вместо STOP_REASON_TIMEOUT
.
Если новые причины прерванной остановки возникают часто, система предпримет меры по смягчению последствий, чтобы снизить частоту выполнения заданий.
Приложения должны использовать новую причину остановки, чтобы обнаруживать и сокращать количество заброшенных заданий.
Если вы используете WorkManager, AsyncTask или DownloadManager, на вас это не повлияет, поскольку эти API управляют жизненным циклом задания от имени вашего приложения.
Полное прекращение поддержки JobInfo#setImportantWhileForeground
The JobInfo.Builder#setImportantWhileForeground(boolean)
method indicates the importance of a job while the scheduling app is in the
foreground or when temporarily exempted from background restrictions.
This method has been deprecated since Android 12 (API level 31). Starting in Android 16, it no longer functions effectively and calling this method will be ignored.
This removal of functionality also applies to
JobInfo#isImportantWhileForeground()
. Starting in Android
16, if the method is called, the method returns false
.
Упорядоченная область приоритета широковещательной передачи больше не является глобальной.
Приложениям Android разрешено определять приоритеты приемников вещания, чтобы контролировать порядок, в котором получатели получают и обрабатывают трансляцию. Для получателей, объявленных в манифесте, приложения могут использовать атрибут android:priority
для определения приоритета, а для получателей, зарегистрированных в контексте, приложения могут использовать API IntentFilter#setPriority()
для определения приоритета. При отправке широковещательной рассылки система доставляет ее получателям в порядке их приоритета, от самого высокого к самому низкому.
В Android 16 порядок широковещательной доставки с использованием атрибута android:priority
или IntentFilter#setPriority()
между различными процессами не гарантируется. Приоритеты вещания будут соблюдаться только в рамках одного и того же процесса подачи заявки, а не во всех процессах.
Кроме того, приоритеты вещания будут автоматически ограничены диапазоном ( SYSTEM_LOW_PRIORITY
+ 1, SYSTEM_HIGH_PRIORITY
– 1). Только системным компонентам будет разрешено устанавливать SYSTEM_LOW_PRIORITY
, SYSTEM_HIGH_PRIORITY
в качестве приоритета широковещания.
Ваше приложение может пострадать, если оно выполняет одно из следующих действий:
- Ваше приложение объявило несколько процессов с одним и тем же намерением широковещания и ожидает получения этих намерений в определенном порядке в зависимости от приоритета.
- Процесс вашего приложения взаимодействует с другими процессами и ожидает получения широковещательного намерения в определенном порядке.
Если процессам необходимо координировать друг друга, им следует взаимодействовать, используя другие каналы координации.
Внутренние изменения АРТ
Android 16 includes the latest updates to the Android Runtime (ART) that improve the Android Runtime's (ART's) performance and provide support for additional Java features. Through Google Play System updates, these improvements are also available to over a billion devices running Android 12 (API level 31) and higher.
As these changes are released, libraries and app code that rely on internal structures of ART might not work correctly on devices running Android 16, along with earlier Android versions that update the ART module through Google Play system updates.
Relying on internal structures (such as non-SDK interfaces) can always lead to compatibility problems, but it's particularly important to avoid relying on code (or libraries containing code) that leverages internal ART structures, since ART changes aren't tied to the platform version the device is running on and they go out to over a billion devices through Google Play system updates.
All developers should check whether their app is impacted by testing their apps thoroughly on Android 16. In addition, check the known issues to see if your app depends on any libraries that we've identified that rely on internal ART structures. If you do have app code or library dependencies that are affected, seek public API alternatives whenever possible and request public APIs for new use cases by creating a feature request in our issue tracker.
Режим совместимости размера страницы 16 КБ
Android 15 introduced support for 16 KB memory pages to optimize performance of the platform. Android 16 adds a compatibility mode, allowing some apps built for 4 KB memory pages to run on a device configured for 16 KB memory pages.
If Android detects that your app has 4 KB aligned memory pages, it
automatically uses compatibility mode and display a notification dialog to the
user. Setting the android:pageSizeCompat
property in the AndroidManifest.xml
to enable the backwards compatibility mode will prevent the display of the
dialog when your app launches. For best performance, reliability, and stability,
your app should still be 16 KB aligned. Check out
our recent blog post
on updating your apps to support 16 KB memory pages for more details.

Пользовательский опыт и системный интерфейс
Android 16 включает следующие изменения, призванные создать более последовательный и интуитивно понятный пользовательский интерфейс.
Отказ от деструктивных объявлений о доступности
Android 16 deprecates accessibility announcements, characterized by the use of
announceForAccessibility
or the dispatch of
TYPE_ANNOUNCEMENT
accessibility events. These can create
inconsistent user experiences for users of TalkBack and Android's screen reader,
and alternatives better serve a broader range of user needs across a variety of
Android's assistive technologies.
Examples of alternatives:
- For significant UI changes like window changes, use
Activity.setTitle(CharSequence)
andsetAccessibilityPaneTitle(java.lang.CharSequence)
. In Compose, useModifier.semantics { paneTitle = "paneTitle" }
- To inform the user of changes to critical UI, use
setAccessibilityLiveRegion(int)
. In Compose, useModifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
. These should be used sparingly as they may generate announcements every time a View is updated. - To notify users about errors, send an
AccessibilityEvent
of typeAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
and setAccessibilityNodeInfo#setError(CharSequence)
, or useTextView#setError(CharSequence)
.
The reference documentation for the deprecated
announceForAccessibility
API includes more details about
suggested alternatives.
Поддержка трехкнопочной навигации.
Android 16 brings predictive back support to the 3-button navigation for apps that have properly migrated to predictive back. Long-pressing the back button initiates a predictive back animation, giving you a preview of where the back swipe takes you.
This behavior applies across all areas of the system that support predictive back animations, including the system animations (back-to-home, cross-task, and cross-activity).
Форм-факторы устройств
Android 16 включает следующие изменения для приложений, проецируемых на дисплеи владельцами виртуальных устройств.
Переопределения владельца виртуального устройства
Владелец виртуального устройства — это доверенное или привилегированное приложение, которое создает виртуальное устройство и управляет им. Владельцы виртуальных устройств запускают приложения на виртуальном устройстве, а затем проецируют их на дисплей удаленного устройства, например персонального компьютера, устройства виртуальной реальности или автомобильной информационно-развлекательной системы. Владелец виртуального устройства находится на локальном устройстве, например мобильном телефоне.

Переопределения для каждого приложения
На устройствах под управлением Android 16 владельцы виртуальных устройств могут переопределять настройки приложений на выбранных виртуальных устройствах, которыми управляют владельцы виртуальных устройств. Например, чтобы улучшить макет приложения, владелец виртуального устройства может игнорировать ограничения ориентации, соотношения сторон и изменения размера при проецировании приложений на внешний дисплей.
Общие критические изменения
Поведение Android 16 может повлиять на пользовательский интерфейс вашего приложения на больших экранах, таких как автомобильные дисплеи или Chromebook, особенно на макетах, разработанных для небольших дисплеев в книжной ориентации. Чтобы узнать, как сделать приложение адаптивным для всех форм-факторов устройств, см. раздел «Об адаптивных макетах» .
Ссылки
Потоковая передача через сопутствующее приложение
Безопасность
Android 16 включает изменения, повышающие безопасность системы и помогающие защитить приложения и пользователей от вредоносных приложений.
Улучшена защита от атак с перенаправлением намерений.
Android 16 обеспечивает защиту по умолчанию от общих атак с перенаправлением Intent
с минимальной совместимостью и необходимыми изменениями разработчика.
Мы по умолчанию представляем решения по усилению безопасности для эксплойтов перенаправления Intent
. В большинстве случаев приложения, использующие намерения, обычно не сталкиваются с проблемами совместимости; мы собирали показатели на протяжении всего процесса разработки, чтобы отслеживать, в каких приложениях могут возникнуть сбои.
Перенаправление намерения в Android происходит, когда злоумышленник может частично или полностью контролировать содержимое намерения, используемого для запуска нового компонента в контексте уязвимого приложения, в то время как приложение-жертва запускает ненадежное намерение подуровня в дополнительном поле намерения («верхнего уровня»). Это может привести к тому, что приложение-злоумышленник запустит частные компоненты в контексте приложения-жертвы, инициирует привилегированные действия или получит URI-доступ к конфиденциальным данным, что потенциально может привести к краже данных и выполнению произвольного кода.
Отключить обработку перенаправления намерений
В Android 16 представлен новый API, который позволяет приложениям отказываться от защиты при запуске. Это может быть необходимо в определенных случаях, когда поведение безопасности по умолчанию мешает законным сценариям использования приложений.
Для приложений, компилируемых с использованием Android 16 SDK или более поздней версии.
Вы можете напрямую использовать метод removeLaunchSecurityProtection()
для объекта Intent.
val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent")
iSublevel?.removeLaunchSecurityProtection() // Opt out from hardening
iSublevel?.let { startActivity(it) }
Для приложений, компилируемых под Android 15 (уровень API 35) или ниже.
Хотя это и не рекомендуется, вы можете использовать отражение для доступа к методу removeLaunchSecurityProtection()
.
val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent", Intent::class.java)
try {
val removeLaunchSecurityProtection = Intent::class.java.getDeclaredMethod("removeLaunchSecurityProtection")
removeLaunchSecurityProtection.invoke(iSublevel)
} catch (e: Exception) {
// Handle the exception, e.g., log it
} // Opt-out from the security hardening using reflection
iSublevel?.let { startActivity(it) }
Возможности подключения
Android 16 включает следующие изменения в стеке Bluetooth для улучшения связи с периферийными устройствами.
Улучшенная обработка потерь по облигациям
Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
,Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
,Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
, Платформа Android 16 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения поведения применяются ко всем приложениям , работающим на Android 16, независимо от targetSdkVersion
. Вам следует протестировать свое приложение, а затем при необходимости изменить его для поддержки этих изменений, где это применимо.
Обязательно ознакомьтесь также со списком изменений поведения, которые влияют только на приложения, ориентированные на Android 16 .
Основная функциональность
Android 16 включает следующие изменения, которые изменяют или расширяют различные основные возможности системы Android.
Оптимизация квот JobScheduler
Начиная с Android 16, мы корректируем квоту времени выполнения обычных и ускоренных заданий на основе следующих факторов:
- В каком резервном сегменте приложения находится приложение : в Android 16 активные резервные сегменты начнут обеспечиваться щедрой квотой времени выполнения.
- Если задание начинает выполнение, когда приложение находится в верхнем состоянии : в Android 16 задания запускаются, пока приложение видно пользователю, и продолжаются после того, как приложение становится невидимым, будут соответствовать квоте времени выполнения задания.
- Если задание выполняется во время работы службы переднего плана : в Android 16 задания, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания. Если вы используете задания для передачи данных, инициируемой пользователем, рассмотрите возможность использования вместо этого заданий передачи данных, инициируемых пользователем .
Это изменение влияет на задачи, запланированные с помощью WorkManager, JobScheduler и DownloadManager. Чтобы выяснить, почему задание было остановлено, мы рекомендуем записать причину, по которой ваше задание было остановлено, вызвав WorkInfo.getStopReason()
(для заданий JobScheduler вызовите JobParameters.getStopReason()
).
Дополнительные сведения о рекомендациях по оптимальному использованию аккумулятора см. в руководстве по оптимизации использования аккумулятора для API планирования задач .
Мы также рекомендуем использовать новый API JobScheduler#getPendingJobReasonsHistory
представленный в Android 16, чтобы понять, почему задание не выполнено.
Тестирование
Чтобы проверить поведение вашего приложения, вы можете включить переопределение определенных оптимизаций квоты заданий, пока приложение работает на устройстве Android 16.
Чтобы отключить принудительное применение «верхнего состояния будет соответствовать квоте выполнения задания», выполните следующую команду adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
Чтобы отключить принудительное выполнение «заданий, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания», выполните следующую команду adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
Чтобы протестировать поведение определенного резервного сегмента приложения, вы можете настроить резервный сегмент вашего приложения с помощью следующей команды adb
:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
Чтобы понять, в каком сегменте ожидания находится ваше приложение, вы можете получить резервный сегмент вашего приложения, используя следующую команду adb
:
adb shell am get-standby-bucket APP_PACKAGE_NAME
Причина прекращения пустых рабочих мест
Прерванное задание происходит, когда объект JobParameters
связанный с заданием, был удален, но JobService#jobFinished(JobParameters, boolean)
не был вызван для сигнала о завершении задания. Это указывает на то, что задание может выполняться и перепланироваться без ведома приложения.
Приложения, использующие JobScheduler, не поддерживают строгую ссылку на объект JobParameters
, и тайм-ауту теперь будет присвоена новая причина остановки задания STOP_REASON_TIMEOUT_ABANDONED
вместо STOP_REASON_TIMEOUT
.
Если новые причины прерванной остановки возникают часто, система предпримет меры по смягчению последствий, чтобы снизить частоту выполнения заданий.
Приложения должны использовать новую причину остановки, чтобы обнаруживать и сокращать количество заброшенных заданий.
Если вы используете WorkManager, AsyncTask или DownloadManager, на вас это не повлияет, поскольку эти API управляют жизненным циклом задания от имени вашего приложения.
Полное прекращение поддержки JobInfo#setImportantWhileForeground
The JobInfo.Builder#setImportantWhileForeground(boolean)
method indicates the importance of a job while the scheduling app is in the
foreground or when temporarily exempted from background restrictions.
This method has been deprecated since Android 12 (API level 31). Starting in Android 16, it no longer functions effectively and calling this method will be ignored.
This removal of functionality also applies to
JobInfo#isImportantWhileForeground()
. Starting in Android
16, if the method is called, the method returns false
.
Упорядоченная область приоритета широковещательной передачи больше не является глобальной.
Приложениям Android разрешено определять приоритеты приемников вещания, чтобы контролировать порядок, в котором получатели получают и обрабатывают трансляцию. Для получателей, объявленных в манифесте, приложения могут использовать атрибут android:priority
для определения приоритета, а для получателей, зарегистрированных в контексте, приложения могут использовать API IntentFilter#setPriority()
для определения приоритета. При отправке широковещательной рассылки система доставляет ее получателям в порядке их приоритета, от самого высокого к самому низкому.
В Android 16 порядок широковещательной доставки с использованием атрибута android:priority
или IntentFilter#setPriority()
между различными процессами не гарантируется. Приоритеты вещания будут соблюдаться только в рамках одного и того же процесса подачи заявки, а не во всех процессах.
Кроме того, приоритеты вещания будут автоматически ограничены диапазоном ( SYSTEM_LOW_PRIORITY
+ 1, SYSTEM_HIGH_PRIORITY
– 1). Только системным компонентам будет разрешено устанавливать SYSTEM_LOW_PRIORITY
, SYSTEM_HIGH_PRIORITY
в качестве приоритета широковещания.
Ваше приложение может пострадать, если оно выполняет одно из следующих действий:
- Ваше приложение объявило несколько процессов с одним и тем же намерением широковещания и ожидает получения этих намерений в определенном порядке в зависимости от приоритета.
- Процесс вашего приложения взаимодействует с другими процессами и ожидает получения широковещательного намерения в определенном порядке.
Если процессам необходимо координировать друг друга, им следует взаимодействовать, используя другие каналы координации.
Внутренние изменения АРТ
Android 16 includes the latest updates to the Android Runtime (ART) that improve the Android Runtime's (ART's) performance and provide support for additional Java features. Through Google Play System updates, these improvements are also available to over a billion devices running Android 12 (API level 31) and higher.
As these changes are released, libraries and app code that rely on internal structures of ART might not work correctly on devices running Android 16, along with earlier Android versions that update the ART module through Google Play system updates.
Relying on internal structures (such as non-SDK interfaces) can always lead to compatibility problems, but it's particularly important to avoid relying on code (or libraries containing code) that leverages internal ART structures, since ART changes aren't tied to the platform version the device is running on and they go out to over a billion devices through Google Play system updates.
All developers should check whether their app is impacted by testing their apps thoroughly on Android 16. In addition, check the known issues to see if your app depends on any libraries that we've identified that rely on internal ART structures. If you do have app code or library dependencies that are affected, seek public API alternatives whenever possible and request public APIs for new use cases by creating a feature request in our issue tracker.
Режим совместимости размера страницы 16 КБ
Android 15 introduced support for 16 KB memory pages to optimize performance of the platform. Android 16 adds a compatibility mode, allowing some apps built for 4 KB memory pages to run on a device configured for 16 KB memory pages.
If Android detects that your app has 4 KB aligned memory pages, it
automatically uses compatibility mode and display a notification dialog to the
user. Setting the android:pageSizeCompat
property in the AndroidManifest.xml
to enable the backwards compatibility mode will prevent the display of the
dialog when your app launches. For best performance, reliability, and stability,
your app should still be 16 KB aligned. Check out
our recent blog post
on updating your apps to support 16 KB memory pages for more details.

Пользовательский опыт и системный интерфейс
Android 16 включает следующие изменения, призванные создать более последовательный и интуитивно понятный пользовательский интерфейс.
Отказ от деструктивных объявлений о доступности
Android 16 deprecates accessibility announcements, characterized by the use of
announceForAccessibility
or the dispatch of
TYPE_ANNOUNCEMENT
accessibility events. These can create
inconsistent user experiences for users of TalkBack and Android's screen reader,
and alternatives better serve a broader range of user needs across a variety of
Android's assistive technologies.
Examples of alternatives:
- For significant UI changes like window changes, use
Activity.setTitle(CharSequence)
andsetAccessibilityPaneTitle(java.lang.CharSequence)
. In Compose, useModifier.semantics { paneTitle = "paneTitle" }
- To inform the user of changes to critical UI, use
setAccessibilityLiveRegion(int)
. In Compose, useModifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
. These should be used sparingly as they may generate announcements every time a View is updated. - To notify users about errors, send an
AccessibilityEvent
of typeAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
and setAccessibilityNodeInfo#setError(CharSequence)
, or useTextView#setError(CharSequence)
.
The reference documentation for the deprecated
announceForAccessibility
API includes more details about
suggested alternatives.
Поддержка трехкнопочной навигации.
Android 16 brings predictive back support to the 3-button navigation for apps that have properly migrated to predictive back. Long-pressing the back button initiates a predictive back animation, giving you a preview of where the back swipe takes you.
This behavior applies across all areas of the system that support predictive back animations, including the system animations (back-to-home, cross-task, and cross-activity).
Форм-факторы устройств
Android 16 включает следующие изменения для приложений, проецируемых на дисплеи владельцами виртуальных устройств.
Переопределения владельца виртуального устройства
Владелец виртуального устройства — это доверенное или привилегированное приложение, которое создает виртуальное устройство и управляет им. Владельцы виртуальных устройств запускают приложения на виртуальном устройстве, а затем проецируют их на дисплей удаленного устройства, например персонального компьютера, устройства виртуальной реальности или автомобильной информационно-развлекательной системы. Владелец виртуального устройства находится на локальном устройстве, например мобильном телефоне.

Переопределения для каждого приложения
На устройствах под управлением Android 16 владельцы виртуальных устройств могут переопределять настройки приложений на выбранных виртуальных устройствах, которыми управляют владельцы виртуальных устройств. Например, чтобы улучшить макет приложения, владелец виртуального устройства может игнорировать ограничения ориентации, соотношения сторон и изменения размера при проецировании приложений на внешний дисплей.
Общие критические изменения
Поведение Android 16 может повлиять на пользовательский интерфейс вашего приложения на больших экранах, таких как автомобильные дисплеи или Chromebook, особенно на макетах, разработанных для небольших дисплеев в книжной ориентации. Чтобы узнать, как сделать приложение адаптивным для всех форм-факторов устройств, см. раздел «Об адаптивных макетах» .
Ссылки
Потоковая передача через сопутствующее приложение
Безопасность
Android 16 включает изменения, повышающие безопасность системы и помогающие защитить приложения и пользователей от вредоносных приложений.
Улучшена защита от атак с перенаправлением намерений.
Android 16 обеспечивает защиту по умолчанию от общих атак с перенаправлением Intent
с минимальной совместимостью и необходимыми изменениями разработчика.
Мы по умолчанию представляем решения по усилению безопасности для эксплойтов перенаправления Intent
. В большинстве случаев приложения, использующие намерения, обычно не сталкиваются с проблемами совместимости; мы собирали показатели на протяжении всего процесса разработки, чтобы отслеживать, в каких приложениях могут возникнуть сбои.
Перенаправление намерения в Android происходит, когда злоумышленник может частично или полностью контролировать содержимое намерения, используемого для запуска нового компонента в контексте уязвимого приложения, в то время как приложение-жертва запускает ненадежное намерение подуровня в дополнительном поле намерения («верхнего уровня»). Это может привести к тому, что приложение-злоумышленник запустит частные компоненты в контексте приложения-жертвы, инициирует привилегированные действия или получит URI-доступ к конфиденциальным данным, что потенциально может привести к краже данных и выполнению произвольного кода.
Отключить обработку перенаправления намерений
В Android 16 представлен новый API, который позволяет приложениям отказываться от защиты при запуске. Это может быть необходимо в определенных случаях, когда поведение безопасности по умолчанию мешает законным сценариям использования приложений.
Для приложений, компилируемых с использованием Android 16 SDK или более поздней версии.
Вы можете напрямую использовать метод removeLaunchSecurityProtection()
для объекта Intent.
val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent")
iSublevel?.removeLaunchSecurityProtection() // Opt out from hardening
iSublevel?.let { startActivity(it) }
Для приложений, компилируемых под Android 15 (уровень API 35) или ниже.
Хотя это и не рекомендуется, вы можете использовать отражение для доступа к методу removeLaunchSecurityProtection()
.
val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent", Intent::class.java)
try {
val removeLaunchSecurityProtection = Intent::class.java.getDeclaredMethod("removeLaunchSecurityProtection")
removeLaunchSecurityProtection.invoke(iSublevel)
} catch (e: Exception) {
// Handle the exception, e.g., log it
} // Opt-out from the security hardening using reflection
iSublevel?.let { startActivity(it) }
Возможности подключения
Android 16 включает следующие изменения в стеке Bluetooth для улучшения связи с периферийными устройствами.
Улучшенная обработка потерь по облигациям
Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
,Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
,Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
, Платформа Android 16 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения поведения применяются ко всем приложениям , работающим на Android 16, независимо от targetSdkVersion
. Вам следует протестировать свое приложение, а затем при необходимости изменить его для поддержки этих изменений, где это применимо.
Обязательно ознакомьтесь также со списком изменений поведения, которые влияют только на приложения, ориентированные на Android 16 .
Основная функциональность
Android 16 включает следующие изменения, которые изменяют или расширяют различные основные возможности системы Android.
Оптимизация квот JobScheduler
Начиная с Android 16, мы корректируем квоту времени выполнения обычных и ускоренных заданий на основе следующих факторов:
- В каком резервном сегменте приложения находится приложение : в Android 16 активные резервные сегменты начнут обеспечиваться щедрой квотой времени выполнения.
- Если задание начинает выполнение, когда приложение находится в верхнем состоянии : в Android 16 задания запускаются, пока приложение видно пользователю, и продолжаются после того, как приложение становится невидимым, будут соответствовать квоте времени выполнения задания.
- Если задание выполняется во время работы службы переднего плана : в Android 16 задания, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания. Если вы используете задания для передачи данных, инициируемой пользователем, рассмотрите возможность использования вместо этого заданий передачи данных, инициируемых пользователем .
Это изменение влияет на задачи, запланированные с помощью WorkManager, JobScheduler и DownloadManager. Чтобы выяснить, почему задание было остановлено, мы рекомендуем записать причину, по которой ваше задание было остановлено, вызвав WorkInfo.getStopReason()
(для заданий JobScheduler вызовите JobParameters.getStopReason()
).
Дополнительные сведения о рекомендациях по оптимальному использованию аккумулятора см. в руководстве по оптимизации использования аккумулятора для API планирования задач .
Мы также рекомендуем использовать новый API JobScheduler#getPendingJobReasonsHistory
представленный в Android 16, чтобы понять, почему задание не выполнено.
Тестирование
Чтобы проверить поведение вашего приложения, вы можете включить переопределение определенных оптимизаций квоты заданий, пока приложение работает на устройстве Android 16.
Чтобы отключить принудительное применение «верхнего состояния будет соответствовать квоте выполнения задания», выполните следующую команду adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
Чтобы отключить принудительное выполнение «заданий, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания», выполните следующую команду adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
Чтобы протестировать поведение определенного резервного сегмента приложения, вы можете настроить резервный сегмент вашего приложения с помощью следующей команды adb
:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
Чтобы понять, в каком сегменте ожидания находится ваше приложение, вы можете получить резервный сегмент вашего приложения, используя следующую команду adb
:
adb shell am get-standby-bucket APP_PACKAGE_NAME
Причина прекращения пустых рабочих мест
Прерванное задание происходит, когда объект JobParameters
связанный с заданием, был удален, но JobService#jobFinished(JobParameters, boolean)
не был вызван для сигнала о завершении задания. Это указывает на то, что задание может выполняться и перепланироваться без ведома приложения.
Приложения, использующие JobScheduler, не поддерживают строгую ссылку на объект JobParameters
, и тайм-ауту теперь будет присвоена новая причина остановки задания STOP_REASON_TIMEOUT_ABANDONED
вместо STOP_REASON_TIMEOUT
.
Если новые причины прерванной остановки возникают часто, система предпримет меры по смягчению последствий, чтобы снизить частоту выполнения заданий.
Приложения должны использовать новую причину остановки, чтобы обнаруживать и сокращать количество заброшенных заданий.
Если вы используете WorkManager, AsyncTask или DownloadManager, на вас это не повлияет, поскольку эти API управляют жизненным циклом задания от имени вашего приложения.
Полное прекращение поддержки JobInfo#setImportantWhileForeground
The JobInfo.Builder#setImportantWhileForeground(boolean)
method indicates the importance of a job while the scheduling app is in the
foreground or when temporarily exempted from background restrictions.
This method has been deprecated since Android 12 (API level 31). Starting in Android 16, it no longer functions effectively and calling this method will be ignored.
This removal of functionality also applies to
JobInfo#isImportantWhileForeground()
. Starting in Android
16, if the method is called, the method returns false
.
Упорядоченная область приоритета широковещательной передачи больше не является глобальной.
Приложениям Android разрешено определять приоритеты приемников вещания, чтобы контролировать порядок, в котором получатели получают и обрабатывают трансляцию. Для получателей, объявленных в манифесте, приложения могут использовать атрибут android:priority
для определения приоритета, а для получателей, зарегистрированных в контексте, приложения могут использовать API IntentFilter#setPriority()
для определения приоритета. При отправке широковещательной рассылки система доставляет ее получателям в порядке их приоритета, от самого высокого к самому низкому.
В Android 16 порядок широковещательной доставки с использованием атрибута android:priority
или IntentFilter#setPriority()
между различными процессами не гарантируется. Приоритеты вещания будут соблюдаться только в рамках одного и того же процесса подачи заявки, а не во всех процессах.
Кроме того, приоритеты вещания будут автоматически ограничены диапазоном ( SYSTEM_LOW_PRIORITY
+ 1, SYSTEM_HIGH_PRIORITY
– 1). Только системным компонентам будет разрешено устанавливать SYSTEM_LOW_PRIORITY
, SYSTEM_HIGH_PRIORITY
в качестве приоритета широковещания.
Ваше приложение может пострадать, если оно выполняет одно из следующих действий:
- Ваше приложение объявило несколько процессов с одним и тем же намерением широковещания и ожидает получения этих намерений в определенном порядке в зависимости от приоритета.
- Процесс вашего приложения взаимодействует с другими процессами и ожидает получения широковещательного намерения в определенном порядке.
Если процессам необходимо координировать друг друга, им следует взаимодействовать, используя другие каналы координации.
Внутренние изменения АРТ
Android 16 includes the latest updates to the Android Runtime (ART) that improve the Android Runtime's (ART's) performance and provide support for additional Java features. Through Google Play System updates, these improvements are also available to over a billion devices running Android 12 (API level 31) and higher.
As these changes are released, libraries and app code that rely on internal structures of ART might not work correctly on devices running Android 16, along with earlier Android versions that update the ART module through Google Play system updates.
Relying on internal structures (such as non-SDK interfaces) can always lead to compatibility problems, but it's particularly important to avoid relying on code (or libraries containing code) that leverages internal ART structures, since ART changes aren't tied to the platform version the device is running on and they go out to over a billion devices through Google Play system updates.
All developers should check whether their app is impacted by testing their apps thoroughly on Android 16. In addition, check the known issues to see if your app depends on any libraries that we've identified that rely on internal ART structures. If you do have app code or library dependencies that are affected, seek public API alternatives whenever possible and request public APIs for new use cases by creating a feature request in our issue tracker.
Режим совместимости размера страницы 16 КБ
Android 15 introduced support for 16 KB memory pages to optimize performance of the platform. Android 16 adds a compatibility mode, allowing some apps built for 4 KB memory pages to run on a device configured for 16 KB memory pages.
If Android detects that your app has 4 KB aligned memory pages, it
automatically uses compatibility mode and display a notification dialog to the
user. Setting the android:pageSizeCompat
property in the AndroidManifest.xml
to enable the backwards compatibility mode will prevent the display of the
dialog when your app launches. For best performance, reliability, and stability,
your app should still be 16 KB aligned. Check out
our recent blog post
on updating your apps to support 16 KB memory pages for more details.

Пользовательский опыт и системный интерфейс
Android 16 включает следующие изменения, призванные создать более последовательный и интуитивно понятный пользовательский интерфейс.
Отказ от деструктивных объявлений о доступности
Android 16 deprecates accessibility announcements, characterized by the use of
announceForAccessibility
or the dispatch of
TYPE_ANNOUNCEMENT
accessibility events. These can create
inconsistent user experiences for users of TalkBack and Android's screen reader,
and alternatives better serve a broader range of user needs across a variety of
Android's assistive technologies.
Examples of alternatives:
- For significant UI changes like window changes, use
Activity.setTitle(CharSequence)
andsetAccessibilityPaneTitle(java.lang.CharSequence)
. In Compose, useModifier.semantics { paneTitle = "paneTitle" }
- To inform the user of changes to critical UI, use
setAccessibilityLiveRegion(int)
. In Compose, useModifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
. These should be used sparingly as they may generate announcements every time a View is updated. - To notify users about errors, send an
AccessibilityEvent
of typeAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
and setAccessibilityNodeInfo#setError(CharSequence)
, or useTextView#setError(CharSequence)
.
The reference documentation for the deprecated
announceForAccessibility
API includes more details about
suggested alternatives.
Поддержка трехкнопочной навигации.
Android 16 brings predictive back support to the 3-button navigation for apps that have properly migrated to predictive back. Long-pressing the back button initiates a predictive back animation, giving you a preview of where the back swipe takes you.
This behavior applies across all areas of the system that support predictive back animations, including the system animations (back-to-home, cross-task, and cross-activity).
Форм-факторы устройств
Android 16 включает следующие изменения для приложений, проецируемых на дисплеи владельцами виртуальных устройств.
Переопределения владельца виртуального устройства
Владелец виртуального устройства — это доверенное или привилегированное приложение, которое создает виртуальное устройство и управляет им. Владельцы виртуальных устройств запускают приложения на виртуальном устройстве, а затем проецируют их на дисплей удаленного устройства, например персонального компьютера, устройства виртуальной реальности или автомобильной информационно-развлекательной системы. Владелец виртуального устройства находится на локальном устройстве, например мобильном телефоне.

Переопределения для каждого приложения
На устройствах под управлением Android 16 владельцы виртуальных устройств могут переопределять настройки приложений на выбранных виртуальных устройствах, которыми управляют владельцы виртуальных устройств. Например, чтобы улучшить макет приложения, владелец виртуального устройства может игнорировать ограничения ориентации, соотношения сторон и изменения размера при проецировании приложений на внешний дисплей.
Общие критические изменения
Поведение Android 16 может повлиять на пользовательский интерфейс вашего приложения на больших экранах, таких как автомобильные дисплеи или Chromebook, особенно на макетах, разработанных для небольших дисплеев в книжной ориентации. Чтобы узнать, как сделать приложение адаптивным для всех форм-факторов устройств, см. раздел «Об адаптивных макетах» .
Ссылки
Потоковая передача через сопутствующее приложение
Безопасность
Android 16 включает изменения, повышающие безопасность системы и помогающие защитить приложения и пользователей от вредоносных приложений.
Улучшена защита от атак с перенаправлением намерений.
Android 16 обеспечивает защиту по умолчанию от общих атак с перенаправлением Intent
с минимальной совместимостью и необходимыми изменениями разработчика.
Мы по умолчанию представляем решения по усилению безопасности для эксплойтов перенаправления Intent
. В большинстве случаев приложения, использующие намерения, обычно не сталкиваются с проблемами совместимости; мы собирали показатели на протяжении всего процесса разработки, чтобы отслеживать, в каких приложениях могут возникнуть сбои.
Перенаправление намерения в Android происходит, когда злоумышленник может частично или полностью контролировать содержимое намерения, используемого для запуска нового компонента в контексте уязвимого приложения, в то время как приложение-жертва запускает ненадежное намерение подуровня в дополнительном поле намерения («верхнего уровня»). Это может привести к тому, что приложение-злоумышленник запустит частные компоненты в контексте приложения-жертвы, инициирует привилегированные действия или получит URI-доступ к конфиденциальным данным, что потенциально может привести к краже данных и выполнению произвольного кода.
Отключить обработку перенаправления намерений
В Android 16 представлен новый API, который позволяет приложениям отказываться от защиты при запуске. Это может быть необходимо в определенных случаях, когда поведение безопасности по умолчанию мешает законным сценариям использования приложений.
Для приложений, компилируемых с использованием Android 16 SDK или более поздней версии.
Вы можете напрямую использовать метод removeLaunchSecurityProtection()
для объекта Intent.
val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent")
iSublevel?.removeLaunchSecurityProtection() // Opt out from hardening
iSublevel?.let { startActivity(it) }
Для приложений, компилируемых под Android 15 (уровень API 35) или ниже.
Хотя это и не рекомендуется, вы можете использовать отражение для доступа к методу removeLaunchSecurityProtection()
.
val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent", Intent::class.java)
try {
val removeLaunchSecurityProtection = Intent::class.java.getDeclaredMethod("removeLaunchSecurityProtection")
removeLaunchSecurityProtection.invoke(iSublevel)
} catch (e: Exception) {
// Handle the exception, e.g., log it
} // Opt-out from the security hardening using reflection
iSublevel?.let { startActivity(it) }
Возможности подключения
Android 16 включает следующие изменения в стеке Bluetooth для улучшения связи с периферийными устройствами.
Улучшенная обработка потерь по облигациям
Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
,Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.
,Начиная с Android 16, стек Bluetooth был обновлен для повышения безопасности и удобства работы пользователей при обнаружении потери удаленного соединения. Раньше система автоматически удаляла связь и инициировала новый процесс сопряжения, что могло привести к непреднамеренному повторному сопряжению. Мы видели во многих случаях приложения, которые не заботятся о событии потери облигаций должным образом.
Чтобы унифицировать этот опыт, в Android 16 улучшена обработка потерь по облигациям в системе. Если ранее подключенное устройство Bluetooth не могло быть аутентифицировано при повторном подключении, система отключит соединение, сохранит информацию о локальной связи и отобразит системное диалоговое окно, информирующее пользователей о потере соединения и предписывающее им выполнить повторное соединение.