Платформа Android 13 включает изменения поведения, которые могут повлиять на ваше приложение. Следующие изменения поведения применяются ко всем приложениям , когда они работают на Android 13, независимо от targetSdkVersion
. Вам следует протестировать свое приложение, а затем изменить его по мере необходимости для поддержки этих функций должным образом, где это применимо.
Обязательно ознакомьтесь со списком изменений поведения, которые затрагивают только приложения, предназначенные для Android 13 .
Производительность и аккумулятор
Диспетчер задач
Начиная с Android 13 (уровень API 33) пользователи могут завершить рабочий процесс из панели уведомлений, чтобы остановить приложения, которые имеют текущие службы переднего плана, как показано на рисунке 1. Эта возможность известна как диспетчер задач . Приложения должны иметь возможность обрабатывать эту инициированную пользователем остановку .
Улучшение обработки заданий предварительной выборки с помощью JobScheduler
JobScheduler предоставляет приложениям возможность отмечать определенные задания как задания "prefetch" (используя JobInfo.Builder.setPrefetch()
), что означает, что они должны в идеале запускаться близко к следующему запуску приложения и до него, чтобы улучшить пользовательский опыт. Исторически JobScheduler использовал сигнал только для того, чтобы задания prefetch могли оппортунистически использовать свободные или избыточные данные.
В Android 13 (API уровня 33) и выше система пытается определить время следующего запуска приложения и использует эту оценку для запуска заданий предварительной выборки. Приложения должны пытаться использовать задания предварительной выборки для любой работы, которую они хотят выполнить до следующего запуска приложения.
Использование ресурсов батареи
Android 13 (уровень API 33) предоставляет системе следующие способы более эффективного управления временем автономной работы устройства:
- Обновлены правила, определяющие, когда система помещает ваше приложение в «ограниченную» область ожидания приложений .
- Новые ограничения на работу, которую может выполнять ваше приложение, когда пользователь переводит его в состояние «ограничено» для фонового использования батареи.
При тестировании приложения с этими изменениями обязательно проверьте следующее:
Проверьте, как ваше приложение реагирует, когда система помещает его в «ограниченный» App Standby Bucket . Используйте следующую команду Android Debug Bridge (ADB), чтобы назначить ваше приложение этому контейнеру:
adb shell am set-standby-bucket PACKAGE_NAME restricted
Проверьте, как ваше приложение реагирует на следующие ограничения, которые обычно применяются к приложениям, находящимся в состоянии «ограничения» на фоновое использование батареи:
- Невозможно запустить службы переднего плана
- Существующие приоритетные службы удаляются с переднего плана.
- Сигнализация не срабатывает
- Задания не выполняются
Используйте следующую команду ADB, чтобы перевести ваше приложение в «ограниченное» состояние:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Квоты высокоприоритетных сообщений Firebase Cloud (FCM)
Android 13 (уровень API 33) обновляет квоты Firebase Cloud Messaging (FCM) для повышения надежности доставки FCM с высоким приоритетом для приложений, которые показывают уведомления в ответ на FCM с высоким приоритетом. В Android 13 (уровень API 33) произошло следующее:
- App Standby Buckets больше не определяют, сколько FCM с высоким приоритетом может использовать приложение.
- Теперь система понижает приоритет сообщений с высоким приоритетом, если обнаруживает приложение, постоянно отправляющее сообщения с высоким приоритетом, которые не приводят к уведомлению.
Как и в предыдущих версиях Android, FCM с высоким приоритетом, которые превышают квоту, понижаются до обычного приоритета. При запуске Foreground Services (FGS) в ответ на FCM мы рекомендуем проверить результат RemoteMessage.getPriority()
и подтвердить, что он имеет PRIORITY_HIGH
и/или обработать любые потенциальные исключения ForegroundServiceStartNotAllowedException
.
Если ваше приложение не всегда публикует уведомления в ответ на FCM с высоким приоритетом, мы рекомендуем вам изменить приоритет этих FCM на обычный , чтобы сообщения, которые приводят к уведомлению, не понижались в рейтинге.
Конфиденциальность
Разрешение на выполнение уведомлений
Android 13 (API уровня 33) вводит разрешение на уведомления во время выполнения: POST_NOTIFICATIONS
. Это изменение помогает пользователям сосредоточиться на уведомлениях, которые наиболее важны для них.
Мы настоятельно рекомендуем вам как можно скорее перейти на Android 13 или более позднюю версию, чтобы воспользоваться преимуществами дополнительного контроля и гибкости этой функции.
Узнайте больше о передовых методах предоставления разрешений приложениям .
Скрыть конфиденциальную информацию из буфера обмена
Если ваше приложение позволяет пользователям копировать конфиденциальный контент, такой как пароли или данные кредитной карты, в буфер обмена, необходимо добавить флаг в ClipDescription
ClipData перед вызовом ClipboardManager#setPrimaryClip()
. Добавление этого флага предотвращает появление конфиденциального контента в предварительном просмотре контента.


Чтобы отметить конфиденциальный контент, добавьте логическое дополнение к ClipDescription
. Все приложения должны делать это, независимо от целевого уровня API.
// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
Чтобы узнать больше о новом пользовательском интерфейсе буфера обмена, посетите страницу функций копирования и вставки .
Безопасность
Откажитесь от общего идентификатора пользователя
Если ваше приложение использует устаревший атрибут android:sharedUserId
и больше не зависит от функциональности атрибута, вы можете установить атрибут android:sharedUserMaxSdkVersion
равным 32
, как показано в следующем фрагменте кода:
<manifest ...> <!-- To maintain backward compatibility, continue to use "android:sharedUserId" if you already added it to your manifest. --> android:sharedUserId="SHARED_PACKAGE_NAME" android:sharedUserMaxSdkVersion="32" ... </manifest>
Этот атрибут сообщает системе, что ваше приложение больше не полагается на общий идентификатор пользователя. Если ваше приложение объявляет android:sharedUserMaxSdkVersion
и недавно установлено на устройствах под управлением Android 13 или выше, ваше приложение ведет себя так, как будто вы никогда не определяли android:sharedUserId
. Обновленные приложения по-прежнему используют существующий общий идентификатор пользователя.
Общие идентификаторы пользователей вызывают недетерминированное поведение в менеджере пакетов. Вместо этого ваше приложение должно использовать надлежащие механизмы связи, такие как службы и поставщики контента, чтобы облегчить взаимодействие между общими компонентами.
Пользовательский опыт
Отключаемые уведомления служб переднего плана
На устройствах под управлением Android 13 и выше пользователи могут по умолчанию отклонять уведомления, связанные с активными службами .
Основная функциональность
Удален устаревший экземпляр реализации речевого сервиса
В Android 13 из приложения Google удалена реализация SpeechService
, включая Voice IME, RecognitionService
и API на основе намерений .
В Android 12 произошли следующие изменения:
- Функциональность
SpeechService
была перенесена в приложение Speech Services by Google , которое стало поставщикомSpeechService
по умолчанию. - Функциональность
RecognitionService
была перенесена в приложение Android System Intelligence для поддержки распознавания речи на устройстве.
Чтобы обеспечить совместимость приложений на Android 12, приложение Google использует трамплин для перенаправления трафика в приложение Speech Services by Google. В Android 13 этот трамплин удален.
Приложения должны использовать поставщика SpeechService
по умолчанию для устройства, а не жестко задавать конкретное приложение.