Платформа Android 16 включает изменения поведения, которые могут повлиять на ваше приложение. Следующие изменения поведения применяются ко всем приложениям , когда они работают на Android 16, независимо от targetSdkVersion
. Вам следует протестировать свое приложение, а затем изменить его по мере необходимости для поддержки этих изменений, где это применимо.
Обязательно ознакомьтесь со списком изменений поведения, которые затрагивают только приложения, предназначенные для Android 16 .
Основная функциональность
Android 16 (уровень API 36) включает в себя следующие изменения, которые изменяют или расширяют различные основные возможности системы 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
Метод JobInfo.Builder#setImportantWhileForeground(boolean)
указывает на важность задания, когда приложение планирования находится на переднем плане или когда временно освобождено от фоновых ограничений.
Этот метод устарел с Android 12 (уровень API 31). Начиная с Android 16, он больше не работает эффективно, и вызов этого метода будет игнорироваться.
Это удаление функциональности также применимо к JobInfo#isImportantWhileForeground()
. Начиная с Android 16, при вызове метода метод возвращает false
.
Упорядоченная область приоритета вещания больше не является глобальной
Android apps are allowed to define priorities on broadcast receivers to control
the order in which the receivers receive and process the broadcast. For
manifest-declared receivers, apps can use the
android:priority
attribute to define the priority and for
context-registered receivers, apps can use the
IntentFilter#setPriority()
API to define the priority. When
a broadcast is sent, the system delivers it to receivers in order of their
priority, from highest to lowest.
In Android 16, broadcast delivery order using the android:priority
attribute
or IntentFilter#setPriority()
across different processes will not be
guaranteed. Broadcast priorities will only be respected within the same
application process rather than across all processes.
Also, broadcast priorities will be automatically confined to the range
(SYSTEM_LOW_PRIORITY
+ 1,
SYSTEM_HIGH_PRIORITY
- 1). Only system components will be
allowed to set SYSTEM_LOW_PRIORITY
, SYSTEM_HIGH_PRIORITY
as broadcast
priority.
Your app might be impacted if it does either of the following:
- Your application has declared multiple processes with the same broadcast intent, and has expectations around receiving those intents in a certain order based on the priority.
- Your application process interacts with other processes and has expectations around receiving a broadcast intent in a certain order.
If the processes need to coordinate with each other, they should communicate using other coordination channels.
Внутренние изменения АРТ
Android 16 включает последние обновления среды выполнения Android (ART), которые улучшают производительность среды выполнения Android (ART) и обеспечивают поддержку дополнительных функций Java. Благодаря обновлениям системы Google Play эти улучшения также доступны более чем миллиарду устройств под управлением Android 12 (уровень API 31) и выше .
После выхода этих изменений библиотеки и код приложений, использующие внутренние структуры ART, могут работать некорректно на устройствах под управлением Android 16, а также на более ранних версиях Android, которые обновляют модуль ART через обновления системы Google Play.
Использование внутренних структур (например, интерфейсов, отличных от SDK ) всегда может привести к проблемам совместимости, но особенно важно избегать использования кода (или библиотек, содержащих код), который использует внутренние структуры ART, поскольку изменения ART не привязаны к платформе. версию, на которой работает устройство, и они распространяются на более чем миллиард устройств через обновления системы Google Play.
Всем разработчикам следует проверить, не затронуто ли их приложение, путем тщательного тестирования своих приложений на Android 16. Кроме того, проверьте известные проблемы , чтобы узнать, зависит ли ваше приложение от каких-либо выявленных нами библиотек, которые полагаются на внутренние структуры ART. Если у вас есть код приложения или зависимости библиотеки, которые затронуты, по возможности ищите альтернативы общедоступным API и запросите общедоступные API для новых вариантов использования, создав запрос функции в нашем отслеживании проблем.
Режим совместимости с размером страницы 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.
When your app is running on a device with Android 16 or higher, 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. To use the android:pageSizeCompat
property, compile your app
using the Android 16 SDK.
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 (уровень API 36) включает в себя следующие изменения, направленные на создание более последовательного и интуитивно понятного пользовательского опыта.
Отказ от разрушительных объявлений о доступности
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.
Поддержка 3-кнопочной навигации
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 (уровень API 36) включает следующие изменения для приложений при проецировании на дисплеи владельцами виртуальных устройств.
Владелец виртуального устройства переопределяет
Владелец виртуального устройства — это доверенное или привилегированное приложение, которое создает виртуальное устройство и управляет им. Владельцы виртуальных устройств запускают приложения на виртуальном устройстве, а затем проецируют их на дисплей удаленного устройства, например персонального компьютера, устройства виртуальной реальности или автомобильной информационно-развлекательной системы. Владелец виртуального устройства находится на локальном устройстве, например мобильном телефоне.

Переопределения для каждого приложения
На устройствах под управлением Android 16 (уровень API 36) владельцы виртуальных устройств могут переопределить настройки приложения на выбранных виртуальных устройствах, которыми управляют владельцы виртуальных устройств. Например, чтобы улучшить макет приложения, владелец виртуального устройства может игнорировать ограничения ориентации, соотношения сторон и изменения размера при проецировании приложений на внешний дисплей.
Общие критические изменения
Поведение Android 16 может повлиять на пользовательский интерфейс вашего приложения на больших экранах, таких как автомобильные дисплеи или Chromebook, особенно на макетах, разработанных для небольших дисплеев в книжной ориентации. Чтобы узнать, как сделать приложение адаптивным для всех форм-факторов устройств, см. раздел «Об адаптивных макетах» .
Ссылки
Потоковая передача через сопутствующее приложение
,Владелец виртуального устройства — это доверенное или привилегированное приложение, которое создает виртуальное устройство и управляет им. Владельцы виртуальных устройств запускают приложения на виртуальном устройстве, а затем проецируют их на дисплей удаленного устройства, например персонального компьютера, устройства виртуальной реальности или автомобильной информационно-развлекательной системы. Владелец виртуального устройства находится на локальном устройстве, например мобильном телефоне.

Переопределения для каждого приложения
На устройствах под управлением Android 16 (уровень API 36) владельцы виртуальных устройств могут переопределить настройки приложения на выбранных виртуальных устройствах, которыми управляют владельцы виртуальных устройств. Например, чтобы улучшить макет приложения, владелец виртуального устройства может игнорировать ограничения ориентации, соотношения сторон и изменения размера при проецировании приложений на внешний дисплей.
Общие критические изменения
Поведение Android 16 может повлиять на пользовательский интерфейс вашего приложения на больших экранах, таких как автомобильные дисплеи или Chromebook, особенно на макетах, разработанных для небольших дисплеев в книжной ориентации. Чтобы узнать, как сделать приложение адаптивным для всех форм-факторов устройств, см. раздел «Об адаптивных макетах» .
Ссылки
Потоковая передача через сопутствующее приложение
,Владелец виртуального устройства — это доверенное или привилегированное приложение, которое создает виртуальное устройство и управляет им. Владельцы виртуальных устройств запускают приложения на виртуальном устройстве, а затем проецируют их на дисплей удаленного устройства, например персонального компьютера, устройства виртуальной реальности или автомобильной информационно-развлекательной системы. Владелец виртуального устройства находится на локальном устройстве, например мобильном телефоне.

Переопределения для каждого приложения
На устройствах под управлением Android 16 (уровень API 36) владельцы виртуальных устройств могут переопределить настройки приложения на выбранных виртуальных устройствах, которыми управляют владельцы виртуальных устройств. Например, чтобы улучшить макет приложения, владелец виртуального устройства может игнорировать ограничения ориентации, соотношения сторон и изменения размера при проецировании приложений на внешний дисплей.
Общие критические изменения
Поведение Android 16 может повлиять на пользовательский интерфейс вашего приложения на больших экранах, таких как автомобильные дисплеи или Chromebook, особенно на макетах, разработанных для небольших дисплеев в книжной ориентации. Чтобы узнать, как сделать приложение адаптивным для всех форм-факторов устройств, см. раздел «Об адаптивных макетах» .
Ссылки
Потоковая передача через сопутствующее приложение
,Владелец виртуального устройства — это доверенное или привилегированное приложение, которое создает виртуальное устройство и управляет им. Владельцы виртуальных устройств запускают приложения на виртуальном устройстве, а затем проецируют их на дисплей удаленного устройства, например персонального компьютера, устройства виртуальной реальности или автомобильной информационно-развлекательной системы. Владелец виртуального устройства находится на локальном устройстве, например мобильном телефоне.

Переопределения для каждого приложения
На устройствах под управлением Android 16 (уровень API 36) владельцы виртуальных устройств могут переопределить настройки приложения на выбранных виртуальных устройствах, которыми управляют владельцы виртуальных устройств. Например, чтобы улучшить макет приложения, владелец виртуального устройства может игнорировать ограничения ориентации, соотношения сторон и изменения размера при проецировании приложений на внешний дисплей.
Общие критические изменения
Поведение Android 16 может повлиять на пользовательский интерфейс вашего приложения на больших экранах, таких как автомобильные дисплеи или Chromebook, особенно на макетах, разработанных для небольших дисплеев в книжной ориентации. Чтобы узнать, как сделать приложение адаптивным для всех форм-факторов устройств, см. раздел «Об адаптивных макетах» .
Ссылки
Потоковая передача через сопутствующее приложение
Безопасность
Android 16 (уровень API 36) включает изменения, которые повышают безопасность системы, помогая защитить приложения и пользователей от вредоносных программ.
Улучшенная защита от атак с перенаправлением намерений
Android 16 обеспечивает безопасность по умолчанию от общих атак с перенаправлением Intent
с минимальной совместимостью и необходимыми изменениями разработчика.
Мы по умолчанию представляем решения по усилению безопасности для эксплойтов перенаправления Intent
. В большинстве случаев приложения, использующие намерения, обычно не сталкиваются с проблемами совместимости; мы собирали показатели на протяжении всего процесса разработки, чтобы отслеживать, в каких приложениях могут возникнуть сбои.
Перенаправление намерения в Android происходит, когда злоумышленник может частично или полностью контролировать содержимое намерения, используемого для запуска нового компонента в контексте уязвимого приложения, в то время как приложение-жертва запускает ненадежное намерение подуровня в дополнительном поле намерения («верхнего уровня»). Это может привести к тому, что приложение-злоумышленник запустит частные компоненты в контексте приложения-жертвы, инициирует привилегированные действия или получит URI-доступ к конфиденциальным данным, что потенциально может привести к краже данных и выполнению произвольного кода.
Отключить обработку перенаправления намерений
В Android 16 представлен новый API, который позволяет приложениям отказываться от защиты при запуске. Это может быть необходимо в определенных случаях, когда поведение безопасности по умолчанию мешает законным сценариям использования приложений.
Для приложений, компилируемых с использованием SDK Android 16 (уровень API 36) или выше.
Вы можете напрямую использовать метод 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 introduces a new behavior during
companion device pairing flow to protect the user's location
privacy from malicious apps. All companion apps running on Android 16 are no
longer directly notified of discovery timeout using
RESULT_DISCOVERY_TIMEOUT
. Instead, the user is
notified of timeout events with a visual dialog. When the user dismisses
the dialog, the app is alerted of the association failure with
RESULT_USER_REJECTED
.
The search duration has also been extended from the original 20 seconds, and the device discovery can be stopped by the user at any point during the search. If at least one device was discovered within the first 20 seconds of starting the search, the CDM stops searching for additional devices.
Связность
Android 16 (уровень API 36) включает следующие изменения в стеке Bluetooth для улучшения связи с периферийными устройствами.
Улучшение управления убытками по облигациям
Starting in Android 16, the Bluetooth stack has been updated to improve security and user experience when a remote bond loss is detected. Previously, the system would automatically remove the bond and initiate a new pairing process, which could lead to unintentional re-pairing. We have seen in many instances apps not taking care of the bond loss event in a consistent way.
To unify the experience, Android 16 improved the bond loss handling to the system. If a previously bonded Bluetooth device could not be authenticated upon reconnection, the system will disconnect the link, retain local bond information, and display a system dialog informing users of the bond loss and directing them to re-pair.