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

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

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

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

Точные сигналы тревоги по расписанию запрещены по умолчанию

Точные сигналы тревоги предназначены для уведомлений, предназначенных пользователю, или для действий, которые должны произойти в определенное время. Начиная с Android 14, разрешение SCHEDULE_EXACT_ALARM больше не предоставляется заранее большинству недавно установленных приложений, предназначенных для Android 13 и более поздних версий — по умолчанию разрешение запрещено.

Узнайте больше об изменениях в разрешении на планирование точных сигналов тревоги .

Широковещательные рассылки, зарегистрированные в контексте, ставятся в очередь, а приложения кэшируются.

在 Android 14 中,当应用处于缓存状态时,系统可以将上下文注册的广播放入队列中。这与 Android 12(API 级别 31)为异步 binder 事务引入的队列行为类似。在清单中声明的广播不会加入队列,并且应用会从缓存状态中移除以进行广播传递。

当应用离开缓存状态(例如返回前台)时,系统会传递所有已加入队列的广播。某些广播的多个实例 可能会合并为一个广播。取决于其他因素,如系统 运行状况,则可能会从缓存状态中移除应用,以及之前排队 广播。

Приложения могут убивать только свои фоновые процессы

Начиная с Android 14, когда ваше приложение вызывает killBackgroundProcesses() , API может уничтожать только фоновые процессы вашего собственного приложения.

Если вы передадите имя пакета другого приложения, этот метод не окажет влияния на фоновые процессы этого приложения, и в Logcat появится следующее сообщение:

Invalid packageName: com.example.anotherapp

Ваше приложение не должно использовать API killBackgroundProcesses() или иным образом пытаться влиять на жизненный цикл процессов других приложений, даже в более старых версиях ОС. Android предназначен для хранения кэшированных приложений в фоновом режиме и автоматического их закрытия, когда системе требуется память. Если ваше приложение без необходимости завершает работу других приложений, оно может снизить производительность системы и увеличить расход заряда батареи, поскольку позже потребуется полный перезапуск этих приложений, что требует значительно больше ресурсов, чем возобновление существующего кэшированного приложения.

MTU установлен на 517 для первого клиента GATT, запрашивающего MTU.

Начиная с Android 14, стек Android Bluetooth более строго соответствует версии 5.2 базовой спецификации Bluetooth и запрашивает MTU BLE ATT размером 517 байт, когда первый клиент GATT запрашивает MTU с помощью API BluetoothGatt#requestMtu(int) и игнорирует все последующие запросы MTU для этого соединения ACL.

Чтобы учесть это изменение и сделать ваше приложение более надежным, рассмотрите следующие варианты:

  • Ваше периферийное устройство должно ответить на запрос MTU устройства Android с разумным значением, которое может быть обработано периферийным устройством. Окончательное согласованное значение будет минимумом запрошенного значения Android и значения, предоставленного удаленным устройством (например, min(517, remoteMtu) )
    • Для реализации этого исправления может потребоваться обновление прошивки для периферийных устройств.
  • Альтернативно, ограничьте запись характеристик GATT на основе минимума между известным поддерживаемым значением вашего периферийного устройства и полученным изменением MTU.
    • Напоминаем, что вам следует уменьшить поддерживаемый размер заголовков на 5 байт.
    • Например: arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

Новая причина, по которой приложение можно поместить в резервную корзину с ограниченным доступом

В Android 14 появилась новая причина, по которой приложение можно поместить в ограниченный резервный сегмент . Задания приложения несколько раз вызывают ошибки ANR из-за таймаутов метода onStartJob , onStopJob или onBind . (См. JobScheduler усиливает обратный вызов и сетевое поведение для изменений в onStartJob и onStopJob .)

Чтобы отслеживать, вошло ли приложение в ограниченный резервный сегмент, мы рекомендуем войти в журнал с помощью API UsageStatsManager.getAppStandbyBucket() при выполнении задания или UsageStatsManager.queryEventsForSelf() при запуске приложения.

mlock ограничен 64 КБ

В Android 14 (уровень API 34) и выше платформа уменьшает максимальный объем памяти, который можно заблокировать с помощью mlock() до 64 КБ на процесс. В предыдущих версиях ограничение составляло 64 МБ на процесс. Это ограничение способствует лучшему управлению памятью в приложениях и системе. Чтобы обеспечить большую согласованность между устройствами, в Android 14 добавлен новый тест CTS для нового ограничения mlock() на совместимых устройствах.

Система обеспечивает использование ресурсов кэшированного приложения.

从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity 实例在调用并返回 onStop() 方法后执行的任何工作均不可靠,强烈建议不要这样做。

Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。

使用框架支持的典型生命周期 API(例如服务JobSchedulerJetpack 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 фильтрует видимость пакетов в целях конфиденциальности.