Платформа Android 14 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения поведения применяются ко всем приложениям , работающим на Android 14, независимо от targetSdkVersion
. Вам следует протестировать свое приложение, а затем изменить его по мере необходимости, чтобы обеспечить его правильную поддержку, где это применимо.
Обязательно ознакомьтесь также со списком изменений поведения, которые влияют только на приложения, предназначенные для Android 14 .
Основная функциональность
Точные сигналы тревоги по расписанию запрещены по умолчанию
Точные сигналы тревоги предназначены для уведомлений, предназначенных пользователю, или для действий, которые должны произойти в определенное время. Начиная с Android 14, разрешение SCHEDULE_EXACT_ALARM
больше не предоставляется заранее большинству недавно установленных приложений, предназначенных для Android 13 и более поздних версий — по умолчанию разрешение запрещено.
Узнайте больше об изменениях в разрешении на планирование точных сигналов тревоги .
Широковещательные рассылки, зарегистрированные в контексте, ставятся в очередь, а приложения кэшируются.
В Android 14 система может помещать трансляции с регистрацией контекста в очередь , пока приложение находится в кэшированном состоянии . Это похоже на поведение очередей, которое Android 12 (уровень API 31) представил для транзакций асинхронного связывания. Широковещательные передачи, объявленные в манифесте, не ставятся в очередь, а приложения удаляются из кэшированного состояния для широковещательной доставки.
Когда приложение выходит из кэшированного состояния, например, возвращается на передний план, система доставляет все поставленные в очередь широковещательные сообщения. Несколько экземпляров определенных трансляций могут быть объединены в одну трансляцию. В зависимости от других факторов, таких как состояние системы, приложения могут быть удалены из кэшированного состояния, и все ранее поставленные в очередь широковещательные сообщения будут доставлены.
Приложения могут убивать только свои фоновые процессы
Начиная с Android 14, когда ваше приложение вызывает killBackgroundProcesses()
, API может уничтожать только фоновые процессы вашего собственного приложения.
Если вы передадите имя пакета другого приложения, этот метод не окажет влияния на фоновые процессы этого приложения, и в Logcat появится следующее сообщение:
Invalid packageName: com.example.anotherapp
Ваше приложение не должно использовать API killBackgroundProcesses()
или иным образом пытаться влиять на жизненный цикл процессов других приложений, даже в более старых версиях ОС. Android предназначен для хранения кэшированных приложений в фоновом режиме и автоматического их закрытия, когда системе требуется память. Если ваше приложение без необходимости завершает работу других приложений, оно может снизить производительность системы и увеличить расход заряда батареи, поскольку позже потребуется полный перезапуск этих приложений, что требует значительно больше ресурсов, чем возобновление существующего кэшированного приложения.
MTU установлен на 517 для первого клиента GATT, запрашивающего MTU.
Starting from Android 14, the Android Bluetooth stack more strictly adheres to
Version 5.2 of the Bluetooth Core Specification and requests
the BLE ATT MTU to 517 bytes when the first GATT client requests an MTU using
the BluetoothGatt#requestMtu(int)
API, and disregards all subsequent MTU
requests on that ACL connection.
To address this change and make your app more robust, consider the following options:
- Your peripheral device should respond to the Android device's MTU request
with a reasonable value that can be accommodated by the peripheral. The
final negotiated value will be a minimum of the Android requested value and
the remote provided value (for example,
min(517, remoteMtu)
)- Implementing this fix could require a firmware update for peripheral
- Alternatively, limit your GATT characteristic writes based on the minimum
between the known supported value of your peripheral and the received MTU
change
- A reminder that you should reduce 5 bytes from the supported size for the headers
- For example:
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
Новая причина, по которой приложение можно поместить в резервную корзину с ограниченным доступом
Android 14 introduces a new reason an app can be placed into the restricted standby bucket.
The app's jobs trigger ANR errors multiple times due to onStartJob
,
onStopJob
, or onBind
method timeouts.
(See JobScheduler reinforces callback and network behavior for changes
to onStartJob
and onStopJob
.)
To track whether or not the app has entered the restricted standby bucket,
we recommend logging with the API UsageStatsManager.getAppStandbyBucket()
on job execution or UsageStatsManager.queryEventsForSelf()
on app startup.
mlock ограничен 64 КБ
В Android 14 (уровень API 34) и выше платформа уменьшает максимальный объем памяти, который можно заблокировать с помощью mlock()
до 64 КБ на процесс. В предыдущих версиях ограничение составляло 64 МБ на процесс. Это ограничение способствует лучшему управлению памятью в приложениях и системе. Чтобы обеспечить большую согласованность между устройствами, в Android 14 добавлен новый тест CTS для нового ограничения mlock()
на совместимых устройствах.
Система обеспечивает использование ресурсов кэшированного приложения.
从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity
实例在调用并返回 onStop()
方法后执行的任何工作均不可靠,强烈建议不要这样做。
Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。
使用框架支持的典型生命周期 API(例如服务、JobScheduler
和 Jetpack WorkManager)的应用应该不受这些变化的影响。
Пользовательский опыт
Изменения в том, как пользователи видят уведомления, которые невозможно закрыть.
Если ваше приложение показывает пользователям уведомления на переднем плане, которые нельзя отклонить, Android 14 изменил поведение, чтобы пользователи могли отклонять такие уведомления.
Это изменение применяется к приложениям, которые не позволяют пользователям отклонять уведомления на переднем плане, устанавливая Notification.FLAG_ONGOING_EVENT
через Notification.Builder#setOngoing(true)
или NotificationCompat.Builder#setOngoing(true)
. Поведение FLAG_ONGOING_EVENT
было изменено, чтобы пользователь мог фактически закрыть такие уведомления.
Уведомления такого типа по-прежнему нельзя отклонить при следующих условиях:
- Когда телефон заблокирован
- Если пользователь выбирает действие «Очистить все уведомления» (что помогает при случайном закрытии)
Кроме того, это новое поведение не применяется к уведомлениям в следующих случаях:
- Уведомления
CallStyle
- Контроллер политики устройств (DPC) и пакеты поддержки для предприятий
- Медиа-уведомления
- Пакет выбора поиска по умолчанию
Информация о безопасности данных становится более наглядной
Чтобы повысить конфиденциальность пользователей, в Android 14 увеличено количество мест, где система отображает информацию, которую вы указали в форме Play Console. В настоящее время пользователи могут просмотреть эту информацию в разделе «Безопасность данных» на странице вашего приложения в Google Play.
Мы рекомендуем вам ознакомиться с политикой обмена данными о местоположении вашего приложения и внести необходимые обновления в раздел безопасности данных Google Play вашего приложения.
Узнайте больше в руководстве о том, как информация о безопасности данных становится более наглядной на Android 14.
Доступность
Нелинейное масштабирование шрифта до 200 %.
从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍功能选项。
如果您已使用放大像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (200%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。
Безопасность
Минимальный устанавливаемый целевой уровень API
Начиная с Android 14, приложения с версией targetSdkVersion
ниже 23 не могут быть установлены. Требование к приложениям соответствовать этим минимальным требованиям к целевому уровню API повышает безопасность и конфиденциальность пользователей.
Вредоносное ПО часто нацелено на старые уровни API, чтобы обойти средства безопасности и конфиденциальности, представленные в новых версиях Android. Например, некоторые вредоносные приложения используют targetSdkVersion
, равный 22, чтобы избежать применения модели разрешений во время выполнения, представленной в 2015 году в Android 6.0 Marshmallow (уровень API 23). Это изменение в Android 14 усложняет вредоносным программам обход улучшений безопасности и конфиденциальности. Попытка установить приложение, ориентированное на более низкий уровень API, приведет к сбою установки, и в Logcat появится следующее сообщение:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
На устройствах, обновляющихся до Android 14, все приложения с targetSdkVersion
ниже 23 останутся установленными.
Если вам нужно протестировать приложение, ориентированное на более старый уровень API, используйте следующую команду ADB:
adb install --bypass-low-target-sdk-block FILENAME.apk
Названия пакетов владельцев носителей могут быть отредактированы.
Медиа-хранилище поддерживает запросы к столбцу OWNER_PACKAGE_NAME
, который указывает приложение, в котором сохранился конкретный медиа-файл . Начиная с Android 14, это значение удаляется, если не выполняется хотя бы одно из следующих условий:
- Приложение, в котором хранится медиафайл, имеет имя пакета, которое всегда видно другим приложениям.
Приложение, которое запрашивает хранилище мультимедиа, запрашивает разрешение
QUERY_ALL_PACKAGES
.
Узнайте больше о том, как Android фильтрует видимость пакетов в целях конфиденциальности.