При загрузке APK-файла он должен соответствовать требованиям целевого уровня API Google Play.
Начиная с 31 августа 2024 г.:
- Для публикации в Google Play новые приложения и обновления приложений должны быть ориентированы на Android 14 (уровень API 34) или выше; за исключением приложений Wear OS и Android TV, которые должны быть ориентированы на Android 13 (уровень API 33) или выше.
- Существующие приложения должны быть нацелены на Android 13 (уровень API 33) или выше, чтобы оставаться доступными для новых пользователей на устройствах под управлением ОС Android выше целевого уровня API вашего приложения. Приложения, нацеленные на Android 12 (уровень API 31) или ниже (Android 10 (уровень API 29) или ниже для Wear OS и Android 11 (уровень API 30) или ниже для Android TV), будут доступны только на устройствах под управлением ОС Android, которые совпадают или ниже целевого уровня API вашего приложения.
Вы сможете запросить продление до 1 ноября 2024 года, если вам нужно больше времени для обновления вашего приложения. Вы сможете получить доступ к формам расширения вашего приложения в Play Console позже в этом году.
Исключения из этих требований включают в себя:
- Постоянно приватные приложения, доступные только пользователям определенной организации и предназначенные только для внутреннего распространения.
- Приложения, предназначенные для Android Automotive OS, или упакованные в APK-файлы, предназначенные для Android Automotive OS.
Зачем ориентироваться на более новые SDK?
Каждая новая версия Android вносит изменения, которые улучшают безопасность и производительность, а также улучшают пользовательский опыт Android. Некоторые из этих изменений применяются только к приложениям, которые явно заявляют о поддержке через атрибут манифеста targetSdkVersion
(также известный как целевой уровень API).
Настройка вашего приложения для таргетинга на последний уровень API гарантирует, что пользователи смогут воспользоваться этими улучшениями, в то время как ваше приложение по-прежнему сможет работать на старых версиях Android. Таргетинг на последний уровень API также позволяет вашему приложению использовать преимущества новейших функций платформы, чтобы порадовать ваших пользователей. Кроме того, начиная с Android 10 (уровень API 29), пользователи видят предупреждение при первом запуске приложения, если приложение нацелено на Android 5.1 (уровень API 22) или ниже.
В этом документе освещаются важные моменты, которые вам необходимо знать при обновлении целевого уровня API для соответствия требованиям Google Play . См. инструкции в следующих разделах в зависимости от того, на какую версию вы переходите.
Миграция с Android 12 и выше (API уровня 31) на более новую версию
Чтобы обновить приложение для более новой версии Android, следуйте соответствующему списку изменений поведения:
- Изменения в поведении Android 13
- Изменения в поведении Android 14
- Изменения в поведении Android 15
- Изменения в поведении Android 16
Миграция с Android 11 (уровень API 30) на Android 12 (уровень API 31)
Безопасность и разрешения
- Bluetooth : необходимо заменить декларации разрешений
BLUETOOTH
иBLUETOOTH_ADMIN
на разрешенияBLUETOOTH_SCAN
,BLUETOOTH_ADVERTISE
илиBLUETOOTH_CONNECT
. Вам больше не нужно делать запросы на разрешениеLOCATION
во время выполнения для операций Bluetooth. - Местоположение: пользователи могут запрашивать у приложений только приблизительную информацию о местоположении. Вы должны запрашивать разрешение
ACCESS_COARSE_LOCATION
каждый раз, когда запрашиваетеACCESS_FINE_LOCATION
.- Фильтры намерений: если ваше приложение содержит действия , службы или приемники вещания , которые используют фильтры намерений , необходимо явно объявить атрибут android:exported для этих компонентов.
- Спящий режим: приложения могут быть переведены в спящий режим, если они не используются в течение определенного периода времени. В спящем режиме разрешения времени выполнения и кэш вашего приложения сбрасываются, и вы не можете запускать задания или оповещения. Вы можете проверить статус спящего режима вашего приложения .
- Изменчивость ожидаемого намерения : необходимо указать изменчивость каждого объекта PendingIntent, создаваемого вашим приложением.
Пользовательский опыт
- Пользовательские уведомления : уведомления с пользовательскими представлениями содержимого больше не будут использовать всю область уведомлений; вместо этого система применяет стандартный шаблон. Этот шаблон гарантирует, что пользовательские уведомления будут иметь такое же оформление, как и другие уведомления во всех состояниях. Это поведение почти идентично поведению
Notification.DecoratedCustomViewStyle
. - Изменения в проверке ссылок приложений Android : при использовании проверки ссылок приложений Android убедитесь, что ваши фильтры намерений включают категорию BROWSABLE и поддерживают схему HTTPS.
Производительность
Ограничения на запуск службы переднего плана : для Android 12 или выше ваше приложение не может запускать службы переднего плана, пока оно работает в фоновом режиме, за исключением нескольких особых случаев. Если приложение пытается запустить службу переднего плана, работая в фоновом режиме, возникает исключение (за исключением нескольких особых случаев).
Рассмотрите возможность использования WorkManager для планирования и запуска ускоренной работы , пока ваше приложение работает в фоновом режиме. Чтобы завершить срочные действия, запрашиваемые пользователем, запустите службы переднего плана в точном сигнале тревоги.
Ограничения батута уведомлений : когда пользователи нажимают на уведомления, некоторые приложения реагируют запуском компонента приложения, который запускает активность, которую видит и с которой взаимодействует пользователь. Этот компонент приложения известен как батут уведомлений.
Приложения не должны запускать действия из служб или приемников вещания, которые используются в качестве батутов уведомлений. После того, как пользователь нажимает на уведомление или кнопку действия в уведомлении, ваше приложение не может вызвать
startActivity()
внутри службы или приемника вещания.
Ознакомьтесь с полным набором изменений, которые затрагивают приложения, ориентированные на Android 12 (уровень API 31) .
Миграция с Android ниже 11 (API уровня 30)
Выберите версию Android, с которой вы будете выполнять миграцию:
Переход на Android 5 (уровень API 21)
Ознакомьтесь со страницей «Изменения поведения» для каждого из следующих выпусков, чтобы убедиться, что ваше приложение учитывает изменения, внесенные в эти выпуски:
Продолжайте, следуя инструкциям в следующем разделе.
Переход на Android 6 (уровень API 23)
Следующие соображения применимы к приложениям, ориентированным на Android 6.0 и более поздние версии платформы:
Опасные разрешения предоставляются только во время выполнения. Ваши потоки пользовательского интерфейса должны предоставлять возможности для предоставления этих разрешений.
По возможности убедитесь, что ваше приложение готово обрабатывать отклонения запросов на разрешения. Например, если пользователь отклоняет запрос на доступ к GPS устройства, убедитесь, что у вашего приложения есть другой способ продолжить.
Полный список изменений, представленных в Android 6.0 (уровень API 23), можно найти на странице «Изменения поведения» для этой версии платформы.
Продолжайте, следуя инструкциям в следующем разделе.
Переход на Android 7 (уровень API 24)
Следующие соображения применимы к приложениям, ориентированным на Android 7.0 и более поздние версии платформы:
Doze и режим ожидания приложения
Проектируйте с учетом поведения, описанного в разделе «Оптимизация для Doze и App Standby» , который охватывает постепенные изменения, внесенные в нескольких выпусках платформы.
Когда устройство находится в режиме Doze и App Standby, система ведет себя следующим образом:
- Ограничивает доступ к сети
- Откладывает будильники, синхронизации и задания
- Ограничивает сканирование GPS и Wi-Fi
- Ограничивает сообщения Firebase Cloud Messaging с обычным приоритетом.
Изменения разрешений
- Система ограничивает доступ к частным каталогам приложений.
- Предоставление
file://
URI за пределами вашего приложения вызываетFileUriExposedException
. Если вам нужно поделиться файлами за пределами вашего приложения, реализуйтеFileProvider
Система запрещает ссылки на библиотеки, не входящие в NDK.
Полный список изменений, представленных в Android 7.0 (уровень API 24), можно найти на странице «Изменения поведения» для этой версии платформы.
Продолжайте, следуя инструкциям в следующем разделе.
Переход на Android 8 (уровень API 26)
Следующие соображения применимы к приложениям, ориентированным на Android 8.0 и более поздние версии платформы:
- Ограничения фонового выполнения
- Система ограничивает службы для приложений, не работающих на переднем плане.
-
startService()
теперь выдает исключение, когда приложение пытается вызвать его, покаstartService()
запрещен. - Для запуска служб переднего плана приложение должно использовать
startForeground()
иstartForegroundService()
. - Внимательно ознакомьтесь с изменениями, внесенными в API JobScheduler, как описано на странице «Изменения поведения Android 8.0 (API уровня 26)».
- Для Firebase Cloud Messaging требуется версия SDK сервисов Google Play 10.2.1 или выше.
- При использовании Firebase Cloud Messaging доставка сообщений подчиняется ограничениям фонового выполнения. Если при получении сообщения необходима фоновая работа, например, для фоновой синхронизации данных, ваше приложение должно планировать задания с помощью Firebase Job Dispatcher или JobIntentService. Для получения дополнительной информации см. документацию Firebase Cloud Messaging .
-
- Неявные трансляции
- Неявные трансляции ограничены. Информацию об обработке фоновых событий см. в документации по API
JobScheduler
.
- Неявные трансляции ограничены. Информацию об обработке фоновых событий см. в документации по API
- Ограничения по местоположению фона
- Приложения, работающие в фоновом режиме, имеют ограниченный доступ к данным о местоположении.
- На устройствах с сервисами Google Play используйте поставщика объединенных данных о местоположении для получения периодических обновлений местоположения.
- Приложения, работающие в фоновом режиме, имеют ограниченный доступ к данным о местоположении.
- Система ограничивает службы для приложений, не работающих на переднем плане.
- Каналы уведомлений
- Свойства прерывания уведомлений следует определять для каждого канала отдельно.
- Для отображения уведомлений необходимо назначить канал.
- Эта версия платформы поддерживает
NotificationCompat.Builder
.
- Конфиденциальность
- ANDROID_ID ограничивается ключом подписи приложения.
Полный список изменений, представленных в Android 8.0 (уровень API 26), можно найти на странице «Изменения поведения» для этой версии платформы.
Миграция с Android 8 (API 26) на Android 9 (API 28)
- Управление питанием
- Резервные контейнеры приложений вводят новые фоновые ограничения, основанные на активности приложений, такие как отложенные задания, оповещения и квоты на высокоприоритетные сообщения.
- Улучшения в области экономии заряда батареи увеличивают ограничения для приложений в режиме ожидания
- Разрешение на работу службы переднего плана
- Необходимо запросить обычное разрешение
FOREGROUND_SERVICE
(не разрешение времени выполнения)
- Необходимо запросить обычное разрешение
- Изменения в политике конфиденциальности
- Ограниченный доступ к фоновым датчикам
- Ограниченный доступ к журналам вызовов, теперь в группе разрешений
CALL_LOG
- Ограниченный доступ к телефонным номерам, требующий разрешения
READ_CALL_LOG
- Ограниченный доступ к информации Wi-Fi
Полный список изменений, представленных в Android 9.0 (уровень API 28), см. в разделе Изменения поведения .
Миграция с Android 9 (уровень API 28) на Android 10 (уровень API 29)
- Уведомления с полноэкранным намерением
- Необходимо запросить обычное разрешение
USE_FULL_SCREEN_INTENT
(не разрешение времени выполнения).
- Необходимо запросить обычное разрешение
- Поддержка складных устройств и устройств с большим экраном
- Теперь несколько действий могут находиться в состоянии «возобновлено» одновременно, но только одно из них фактически имеет фокус.
- Это изменение влияет на поведение
onResume()
иonPause()
. - Новая концепция жизненного цикла «возобновленной самой верхней активности», которую можно обнаружить, подписавшись на
onTopResumedActivityChanged()
.- Только одно действие может быть «возобновлено сверху».
- Это изменение влияет на поведение
- Если
resizeableActivity
имеет значениеfalse
, приложения могут дополнительно указатьminAspectRatio
, который автоматически преобразует приложение в формат Letterbox при более узких соотношениях сторон.
- Теперь несколько действий могут находиться в состоянии «возобновлено» одновременно, но только одно из них фактически имеет фокус.
- Изменения в политике конфиденциальности
- Хранилище с ограниченным объемом данных
- Доступ к внешнему хранилищу ограничен только каталогом конкретного приложения и определенными типами носителей, созданными приложением.
- Ограниченный доступ к местоположению, когда приложение работает в фоновом режиме, требующий разрешения
ACCESS_BACKGROUND_LOCATION
. - Ограниченный доступ к несбрасываемым идентификаторам, таким как IMEI и серийный номер.
- Ограниченный доступ к информации о физической активности, такой как количество шагов пользователя, требующий разрешения
ACTIVITY_RECOGNITION
. - Ограниченный доступ к некоторым API телефонии, Bluetooth и Wi-Fi , требующий разрешения
ACCESS_FINE_LOCATION
. - Ограниченный доступ к настройкам Wi-Fi
- Приложения больше не могут напрямую включать или отключать Wi-Fi, и это необходимо делать с помощью панелей настроек .
- Ограничения на инициирование подключения к сети Wi-Fi, требующие использования
WifiNetworkSpecifier
илиWifiNetworkSuggestion
.
- Хранилище с ограниченным объемом данных
Миграция с Android 10 (уровень API 29) на Android 11 (уровень API 30)
- Конфиденциальность
- Принудительное использование хранилища с ограничением по области действия : приложения должны использовать модель хранилища с ограничением по области действия, при которой файлы, относящиеся к приложениям, мультимедиа и другие типы файлов сохраняются и доступны с использованием выделенных мест.
- Автоматический сброс разрешений : если пользователи не взаимодействовали с приложением в течение нескольких месяцев, система автоматически сбрасывает конфиденциальные разрешения приложения. Это не должно повлиять на большинство приложений. Если ваше приложение в основном работает в фоновом режиме без взаимодействия с пользователем, вы можете попросить пользователей отключить автоматический сброс.
- Доступ к фоновому местоположению : приложения должны запрашивать разрешение на приоритетное и фоновое местоположение отдельно. Предоставление доступа к разрешению на фоновое местоположение может быть сделано только в настройках приложения, а не в диалоговых окнах разрешений времени выполнения.
- Видимость пакета : когда приложение запрашивает список установленных приложений и служб на устройстве, возвращаемый список фильтруется.
- Если вы используете службы преобразования текста в речь или распознавания речи , вам необходимо добавить элементы запросов для служб в файл манифеста.
- Безопасность
- Сжатые файлы `resource.arsc` больше не поддерживаются.
- Теперь требуется APK Signature Scheme v2. Для обеспечения обратной совместимости разработчикам следует продолжать использовать APK Signature Scheme v1.
- Ограничение интерфейса Non-SDK. Использование интерфейсов non-SDK не рекомендуется для приложений, ориентированных на API уровня 30, поскольку некоторые из этих интерфейсов non-SDK теперь заблокированы. Полный список заблокированных интерфейсов non-SDK см. в разделе Интерфейсы non-SDK, которые теперь заблокированы в Android 11 .
Полный список изменений, представленных в Android 11 (уровень API 30), можно найти на странице «Изменения поведения» .
Продолжайте обновление до API 31, следуя инструкциям в предыдущем разделе .
Модернизируйте свои приложения
При обновлении целевого уровня API для ваших приложений рассмотрите возможность внедрения новейших функций платформы, чтобы модернизировать ваши приложения и порадовать ваших пользователей.
- Чтобы максимально эффективно использовать камеру, рассмотрите возможность использования CameraX , которая находится в стадии бета-тестирования.
- Используйте компоненты Jetpack , чтобы следовать лучшим практикам, освободиться от написания шаблонного кода и упростить сложные задачи, чтобы вы могли сосредоточиться на нужном вам коде.
- Используйте Kotlin , чтобы писать более качественные приложения быстрее и с меньшим объемом кода.
- Убедитесь, что вы соблюдаете требования конфиденциальности и передовые практики.
- Добавьте поддержку темной темы в свои приложения.
- Добавьте в свои приложения поддержку навигации с помощью жестов .
- Перенесите свое приложение из Google Cloud Messaging (GCM) в последнюю версию Firebase Cloud Messaging.
- Воспользуйтесь преимуществами расширенного управления окнами.
- Поддерживайте большие соотношения сторон (более 16:9), чтобы воспользоваться последними достижениями в области оборудования. Убедитесь, что ваше приложение изменяет размер, чтобы заполнить доступное пространство экрана. Указывайте максимальное соотношение сторон только в крайнем случае. Для получения дополнительной информации о максимальных соотношениях сторон см. Объявление ограниченной поддержки экрана .
- Добавьте поддержку многооконного режима , чтобы повысить производительность вашего приложения и управлять несколькими дисплеями .
- Если отличное минимизированное приложение улучшит пользовательский опыт, добавьте поддержку «картинка в картинке» .
- Оптимизация для устройств с вырезом на дисплее.
- Не предполагайте высоту строки состояния. Вместо этого используйте
WindowInsets
иView.OnApplyWindowInsetsListener
. Чтобы узнать больше, посмотрите видео droidcon NYC 2017. для объяснения. - Не предполагайте, что приложение занимает все окно. Вместо этого подтвердите его местоположение с помощью
View.getLocationInWindow()
, а неView.getLocationOnScreen()
. * При обработкеMotionEvent
используйтеMotionEvent.getX()
иMotionEvent.getY()
, а неMotionEvent.getRawX()
,MotionEvent.getRawY()
.
Проверьте и обновите свои SDK и библиотеки
Убедитесь, что ваши сторонние зависимости SDK поддерживают API 31: некоторые поставщики SDK публикуют его в своем манифесте; другим потребуется дополнительное исследование. Если вы используете SDK, который не поддерживает API 31, сделайте приоритетом работу с поставщиком SDK для решения проблемы.
Кроме того, обратите внимание, что targetSdkVersion
вашего приложения или игры может ограничивать доступ к частным библиотекам платформы Android; подробности см. в разделе Приложения NDK, связывающиеся с библиотеками платформы .
Вам также следует проверить любые ограничения, которые могут существовать в используемой вами версии Android Support Library. Как всегда, вы должны обеспечить совместимость между основной версией Android Support Library и compileSdkVersion
вашего приложения.
Мы рекомендуем вам выбрать targetSdkVersion
, меньший или равный основной версии Support Library. Мы рекомендуем вам обновиться до последней совместимой Support Library, чтобы воспользоваться новейшими функциями совместимости и исправлениями ошибок.
Протестируйте свое приложение
После того, как вы обновите уровень API и функции вашего приложения соответствующим образом, вам следует протестировать некоторые основные варианты использования. Следующие предложения не являются исчерпывающими, но направлены на руководство вашим процессом тестирования. Мы предлагаем тестирование:
- Ваше приложение компилируется в API 29 без ошибок и предупреждений.
Что ваше приложение имеет стратегию для случаев, когда пользователь отклоняет запросы на разрешения, и запрашивает у пользователя разрешения. Для этого:
- Перейдите на экран «Информация о приложении» и отключите каждое разрешение.
- Откройте приложение и убедитесь в отсутствии сбоев.
- Выполните основные тесты вариантов использования и убедитесь, что требуемые разрешения запрашиваются повторно.
Обрабатывает Doze с ожидаемыми результатами и без ошибок.
- Используя adb, переведите тестовое устройство в режим Doze во время работы приложения.
- Протестируйте все варианты использования, которые запускают сообщения Firebase Cloud Messaging.
- Протестируйте все варианты использования, в которых используются сигналы тревоги или задания.
- Устраните любую зависимость от фоновых служб.
- Переведите свое приложение в режим ожидания.
- Протестируйте все варианты использования, которые запускают сообщения Firebase Cloud Messaging.
- Протестируйте все варианты использования, в которых используются сигналы тревоги.
- Используя adb, переведите тестовое устройство в режим Doze во время работы приложения.
Обрабатывает новые фотографии и видео, которые снимаются
- Проверьте, правильно ли ваше приложение обрабатывает ограниченные трансляции
ACTION_NEW_PICTURE
иACTION_NEW_VIDEO
(то есть перемещает их в задания JobScheduler). - Убедитесь, что все критические сценарии использования, зависящие от этих событий, по-прежнему работают.
- Проверьте, правильно ли ваше приложение обрабатывает ограниченные трансляции
Управляет обменом файлами с другими приложениями — протестируйте любой вариант использования, который обменивается данными файлов с любым другим приложением (даже с другим приложением того же разработчика)
- Проверьте, отображается ли содержимое в другом приложении и не приводит ли это к сбоям.
Дополнительная информация
Подпишитесь на рассылку в Google Play Console, чтобы мы могли отправлять вам важные обновления и объявления от Android и Google Play, включая нашу ежемесячную партнерскую рассылку.
,При загрузке APK-файла он должен соответствовать требованиям целевого уровня API Google Play.
Начиная с 31 августа 2024 г.:
- Для публикации в Google Play новые приложения и обновления приложений должны быть ориентированы на Android 14 (уровень API 34) или выше; за исключением приложений Wear OS и Android TV, которые должны быть ориентированы на Android 13 (уровень API 33) или выше.
- Существующие приложения должны быть нацелены на Android 13 (уровень API 33) или выше, чтобы оставаться доступными для новых пользователей на устройствах под управлением ОС Android выше целевого уровня API вашего приложения. Приложения, нацеленные на Android 12 (уровень API 31) или ниже (Android 10 (уровень API 29) или ниже для Wear OS и Android 11 (уровень API 30) или ниже для Android TV), будут доступны только на устройствах под управлением ОС Android, которые совпадают или ниже целевого уровня API вашего приложения.
Вы сможете запросить продление до 1 ноября 2024 года, если вам нужно больше времени для обновления вашего приложения. Вы сможете получить доступ к формам расширения вашего приложения в Play Console позже в этом году.
Исключения из этих требований включают в себя:
- Постоянно приватные приложения, доступные только пользователям определенной организации и предназначенные только для внутреннего распространения.
- Приложения, предназначенные для Android Automotive OS, или упакованные в APK-файлы, предназначенные для Android Automotive OS.
Зачем ориентироваться на более новые SDK?
Каждая новая версия Android вносит изменения, которые улучшают безопасность и производительность, а также улучшают пользовательский опыт Android. Некоторые из этих изменений применяются только к приложениям, которые явно заявляют о поддержке через атрибут манифеста targetSdkVersion
(также известный как целевой уровень API).
Настройка вашего приложения для таргетинга на последний уровень API гарантирует, что пользователи смогут воспользоваться этими улучшениями, в то время как ваше приложение по-прежнему сможет работать на старых версиях Android. Таргетинг на последний уровень API также позволяет вашему приложению использовать преимущества новейших функций платформы, чтобы порадовать ваших пользователей. Кроме того, начиная с Android 10 (уровень API 29), пользователи видят предупреждение при первом запуске приложения, если приложение нацелено на Android 5.1 (уровень API 22) или ниже.
В этом документе освещаются важные моменты, которые вам необходимо знать при обновлении целевого уровня API для соответствия требованиям Google Play . См. инструкции в следующих разделах в зависимости от того, на какую версию вы переходите.
Миграция с Android 12 и выше (API уровня 31) на более новую версию
Чтобы обновить приложение для более новой версии Android, следуйте соответствующему списку изменений поведения:
- Изменения в поведении Android 13
- Изменения в поведении Android 14
- Изменения в поведении Android 15
- Изменения в поведении Android 16
Миграция с Android 11 (уровень API 30) на Android 12 (уровень API 31)
Безопасность и разрешения
- Bluetooth : необходимо заменить декларации разрешений
BLUETOOTH
иBLUETOOTH_ADMIN
на разрешенияBLUETOOTH_SCAN
,BLUETOOTH_ADVERTISE
илиBLUETOOTH_CONNECT
. Вам больше не нужно делать запросы на разрешениеLOCATION
во время выполнения для операций Bluetooth. - Местоположение: пользователи могут запрашивать у приложений только приблизительную информацию о местоположении. Вы должны запрашивать разрешение
ACCESS_COARSE_LOCATION
каждый раз, когда запрашиваетеACCESS_FINE_LOCATION
.- Фильтры намерений: если ваше приложение содержит действия , службы или приемники вещания , которые используют фильтры намерений , необходимо явно объявить атрибут android:exported для этих компонентов.
- Спящий режим: приложения могут быть переведены в спящий режим, если они не используются в течение определенного периода времени. В спящем режиме разрешения времени выполнения и кэш вашего приложения сбрасываются, и вы не можете запускать задания или оповещения. Вы можете проверить статус спящего режима вашего приложения .
- Изменчивость ожидаемого намерения : необходимо указать изменчивость каждого объекта PendingIntent, создаваемого вашим приложением.
Пользовательский опыт
- Пользовательские уведомления : уведомления с пользовательскими представлениями содержимого больше не будут использовать всю область уведомлений; вместо этого система применяет стандартный шаблон. Этот шаблон гарантирует, что пользовательские уведомления будут иметь такое же оформление, как и другие уведомления во всех состояниях. Это поведение почти идентично поведению
Notification.DecoratedCustomViewStyle
. - Изменения в проверке ссылок приложений Android : при использовании проверки ссылок приложений Android убедитесь, что ваши фильтры намерений включают категорию BROWSABLE и поддерживают схему HTTPS.
Производительность
Ограничения на запуск службы переднего плана : для Android 12 или выше ваше приложение не может запускать службы переднего плана, пока оно работает в фоновом режиме, за исключением нескольких особых случаев. Если приложение пытается запустить службу переднего плана, работая в фоновом режиме, возникает исключение (за исключением нескольких особых случаев).
Рассмотрите возможность использования WorkManager для планирования и запуска ускоренной работы , пока ваше приложение работает в фоновом режиме. Чтобы завершить срочные действия, запрашиваемые пользователем, запустите службы переднего плана в точном сигнале тревоги.
Ограничения батута уведомлений : когда пользователи нажимают на уведомления, некоторые приложения реагируют запуском компонента приложения, который запускает активность, которую видит и с которой взаимодействует пользователь. Этот компонент приложения известен как батут уведомлений.
Приложения не должны запускать действия из служб или приемников вещания, которые используются в качестве батутов уведомлений. После того, как пользователь нажимает на уведомление или кнопку действия в уведомлении, ваше приложение не может вызвать
startActivity()
внутри службы или приемника вещания.
Ознакомьтесь с полным набором изменений, которые затрагивают приложения, ориентированные на Android 12 (уровень API 31) .
Миграция с Android ниже 11 (API уровня 30)
Выберите версию Android, с которой вы будете выполнять миграцию:
Переход на Android 5 (уровень API 21)
Ознакомьтесь со страницей «Изменения поведения» для каждого из следующих выпусков, чтобы убедиться, что ваше приложение учитывает изменения, внесенные в эти выпуски:
Продолжайте, следуя инструкциям в следующем разделе.
Переход на Android 6 (уровень API 23)
Следующие соображения применимы к приложениям, ориентированным на Android 6.0 и более поздние версии платформы:
Опасные разрешения предоставляются только во время выполнения. Ваши потоки пользовательского интерфейса должны предоставлять возможности для предоставления этих разрешений.
По возможности убедитесь, что ваше приложение готово обрабатывать отклонения запросов на разрешения. Например, если пользователь отклоняет запрос на доступ к GPS устройства, убедитесь, что у вашего приложения есть другой способ продолжить.
Полный список изменений, представленных в Android 6.0 (уровень API 23), можно найти на странице «Изменения поведения» для этой версии платформы.
Продолжайте, следуя инструкциям в следующем разделе.
Переход на Android 7 (уровень API 24)
Следующие соображения применимы к приложениям, ориентированным на Android 7.0 и более поздние версии платформы:
Doze и режим ожидания приложения
Проектируйте с учетом поведения, описанного в разделе «Оптимизация для Doze и App Standby» , который охватывает постепенные изменения, внесенные в нескольких выпусках платформы.
Когда устройство находится в режиме Doze и App Standby, система ведет себя следующим образом:
- Ограничивает доступ к сети
- Откладывает будильники, синхронизации и задания
- Ограничивает сканирование GPS и Wi-Fi
- Ограничивает сообщения Firebase Cloud Messaging с обычным приоритетом.
Изменения разрешений
- Система ограничивает доступ к частным каталогам приложений.
- Предоставление
file://
URI за пределами вашего приложения вызываетFileUriExposedException
. Если вам нужно поделиться файлами за пределами вашего приложения, реализуйтеFileProvider
Система запрещает ссылки на библиотеки, не входящие в NDK.
Полный список изменений, представленных в Android 7.0 (уровень API 24), можно найти на странице «Изменения поведения» для этой версии платформы.
Продолжайте, следуя инструкциям в следующем разделе.
Переход на Android 8 (уровень API 26)
Следующие соображения применимы к приложениям, ориентированным на Android 8.0 и более поздние версии платформы:
- Ограничения фонового выполнения
- Система ограничивает службы для приложений, не работающих на переднем плане.
-
startService()
теперь выдает исключение, когда приложение пытается вызвать его, покаstartService()
запрещен. - Для запуска служб переднего плана приложение должно использовать
startForeground()
иstartForegroundService()
. - Внимательно ознакомьтесь с изменениями, внесенными в API JobScheduler, как описано на странице «Изменения поведения Android 8.0 (API уровня 26)».
- Для Firebase Cloud Messaging требуется версия SDK сервисов Google Play 10.2.1 или выше.
- При использовании Firebase Cloud Messaging доставка сообщений подчиняется ограничениям фонового выполнения. Если при получении сообщения необходима фоновая работа, например, для фоновой синхронизации данных, ваше приложение должно планировать задания с помощью Firebase Job Dispatcher или JobIntentService. Для получения дополнительной информации см. документацию Firebase Cloud Messaging .
-
- Неявные трансляции
- Неявные трансляции ограничены. Информацию об обработке фоновых событий см. в документации по API
JobScheduler
.
- Неявные трансляции ограничены. Информацию об обработке фоновых событий см. в документации по API
- Ограничения по местоположению фона
- Приложения, работающие в фоновом режиме, имеют ограниченный доступ к данным о местоположении.
- На устройствах с сервисами Google Play используйте поставщика объединенных данных о местоположении для получения периодических обновлений местоположения.
- Приложения, работающие в фоновом режиме, имеют ограниченный доступ к данным о местоположении.
- Система ограничивает службы для приложений, не работающих на переднем плане.
- Каналы уведомлений
- Свойства прерывания уведомлений следует определять для каждого канала отдельно.
- Для отображения уведомлений необходимо назначить канал.
- Эта версия платформы поддерживает
NotificationCompat.Builder
.
- Конфиденциальность
- ANDROID_ID ограничивается ключом подписи приложения.
Полный список изменений, представленных в Android 8.0 (уровень API 26), можно найти на странице «Изменения поведения» для этой версии платформы.
Миграция с Android 8 (API 26) на Android 9 (API 28)
- Управление питанием
- Резервные контейнеры приложений вводят новые фоновые ограничения, основанные на активности приложений, такие как отложенные задания, оповещения и квоты на высокоприоритетные сообщения.
- Улучшения в области экономии заряда батареи увеличивают ограничения для приложений в режиме ожидания
- Разрешение на работу службы переднего плана
- Необходимо запросить обычное разрешение
FOREGROUND_SERVICE
(не разрешение времени выполнения)
- Необходимо запросить обычное разрешение
- Изменения в политике конфиденциальности
- Ограниченный доступ к фоновым датчикам
- Ограниченный доступ к журналам вызовов, теперь в группе разрешений
CALL_LOG
- Ограниченный доступ к телефонным номерам, требующий разрешения
READ_CALL_LOG
- Ограниченный доступ к информации Wi-Fi
Полный список изменений, представленных в Android 9.0 (уровень API 28), см. в разделе Изменения поведения .
Миграция с Android 9 (уровень API 28) на Android 10 (уровень API 29)
- Уведомления с полноэкранным намерением
- Необходимо запросить обычное разрешение
USE_FULL_SCREEN_INTENT
(не разрешение времени выполнения).
- Необходимо запросить обычное разрешение
- Поддержка складных устройств и устройств с большим экраном
- Теперь несколько действий могут находиться в состоянии «возобновлено» одновременно, но только одно из них фактически имеет фокус.
- Это изменение влияет на поведение
onResume()
иonPause()
. - Новая концепция жизненного цикла «возобновленной самой верхней активности», которую можно обнаружить, подписавшись на
onTopResumedActivityChanged()
.- Только одно действие может быть «возобновлено сверху».
- Это изменение влияет на поведение
- Если
resizeableActivity
имеет значениеfalse
, приложения могут дополнительно указатьminAspectRatio
, который автоматически преобразует приложение в формат Letterbox при более узких соотношениях сторон.
- Теперь несколько действий могут находиться в состоянии «возобновлено» одновременно, но только одно из них фактически имеет фокус.
- Изменения в политике конфиденциальности
- Хранилище с ограниченным объемом данных
- Доступ к внешнему хранилищу ограничен только каталогом конкретного приложения и определенными типами носителей, созданными приложением.
- Ограниченный доступ к местоположению, когда приложение работает в фоновом режиме, требующий разрешения
ACCESS_BACKGROUND_LOCATION
. - Ограниченный доступ к несбрасываемым идентификаторам, таким как IMEI и серийный номер.
- Ограниченный доступ к информации о физической активности, такой как количество шагов пользователя, требующий разрешения
ACTIVITY_RECOGNITION
. - Ограниченный доступ к некоторым API телефонии, Bluetooth и Wi-Fi , требующий разрешения
ACCESS_FINE_LOCATION
. - Ограниченный доступ к настройкам Wi-Fi
- Приложения больше не могут напрямую включать или отключать Wi-Fi, и это необходимо делать с помощью панелей настроек .
- Ограничения на инициирование подключения к сети Wi-Fi, требующие использования
WifiNetworkSpecifier
илиWifiNetworkSuggestion
.
- Хранилище с ограниченным объемом данных
Миграция с Android 10 (уровень API 29) на Android 11 (уровень API 30)
- Конфиденциальность
- Принудительное использование хранилища с ограничением по области действия : приложения должны использовать модель хранилища с ограничением по области действия, при которой файлы, относящиеся к приложениям, мультимедиа и другие типы файлов сохраняются и доступны с использованием выделенных мест.
- Автоматический сброс разрешений : если пользователи не взаимодействовали с приложением в течение нескольких месяцев, система автоматически сбрасывает конфиденциальные разрешения приложения. Это не должно повлиять на большинство приложений. Если ваше приложение в основном работает в фоновом режиме без взаимодействия с пользователем, вы можете попросить пользователей отключить автоматический сброс.
- Доступ к фоновому местоположению : приложения должны запрашивать разрешение на приоритетное и фоновое местоположение отдельно. Предоставление доступа к разрешению на фоновое местоположение может быть сделано только в настройках приложения, а не в диалоговых окнах разрешений времени выполнения.
- Видимость пакета : Когда приложение запросы для списка установленных приложений и сервисов на устройстве возвращается, отфильтрован.
- Если вы используете услуги по признанию текста в речь или речи , вам нужно будет добавить запросы для услуг в манифестный файл.
- Безопасность
- Сжатые файлы `resource.arsc` больше не поддерживаются
- Схема подписи APK V2 теперь требуется. По причинам обратной совместимости разработчики также должны продолжать подписывать с схемой подписи APK V1.
- Ограничение интерфейса без SDK. Использование не SDK-интерфейсов не рекомендуется для приложений, нацеленных на уровень API 30, так как некоторые из этих не SDK-интерфейсов теперь блокируются. См. Интерфейсы без SDK, которые теперь заблокированы в Android 11 для полного списка блокированных не-SDK-интерфейсов.
Для исчерпывающего списка изменений, введенных в Android 11 (API -уровне 30), см. Страницу «Изменения поведения» .
Продолжайте обновлять API 31, следуя инструкциям в предыдущем разделе .
Модернизируйте свои приложения
Когда вы обновляете целевой уровень API для ваших приложений, рассмотрите возможность принятия недавних функций платформы для модернизации ваших приложений и восхищения ваших пользователей.
- Подумайте об использовании Camerax , которая находится в бета -версии, чтобы максимально использовать использование камеры.
- Используйте компоненты JetPack , чтобы помочь вам следить за лучшими практиками, освободить вас от написания кода шаблон и упростить сложные задачи, чтобы вы могли сосредоточиться на коде, который вам заботится.
- Используйте Kotlin , чтобы писать лучшие приложения быстрее и с меньшим кодом.
- Убедитесь, что вы следуете требованиям конфиденциальности и передовым практикам.
- Добавьте темную поддержку темы в ваши приложения.
- Добавьте поддержку навигации по жестам в ваши приложения.
- Перенесите свое приложение из Google Cloud Messaging (GCM) на последнюю версию обмена обменами Firebase Cloud.
- Воспользуйтесь преимуществами передового управления окнами.
- Поддержите большие соотношения сторон (более 16: 9), чтобы воспользоваться последними достижениями в области аппаратного обеспечения. Убедитесь, что ваше приложение изменяется, чтобы заполнить доступное пространство экрана. Только объявляет максимальное соотношение сторон как последнее средство. Для получения дополнительной информации о максимальных соотношениях сторон см. Вспомогательную поддержку с ограниченным экраном .
- Добавьте поддержку с несколькими Window , чтобы помочь вашему приложению повысить производительность и управлять несколькими дисплеями .
- Если отличный минимальный опыт приложения улучшит пользовательский опыт, добавьте поддержку для картины .
- Оптимизируйте для устройств с вырезами дисплея.
- Не думайте о высоте статуса. Вместо этого используйте
WindowInsets
иView.OnApplyWindowInsetsListener
. Чтобы узнать больше, посмотрите видео Droidcon NYC 2017. для объяснения. - Не думайте, что в приложении есть все окно. Вместо этого подтвердите его местоположение, используя
View.getLocationInWindow()
, а неView.getLocationOnScreen()
. * При обработкеMotionEvent
используйтеMotionEvent.getX()
иMotionEvent.getY()
, а неMotionEvent.getRawX()
,MotionEvent.getRawY()
.
Проверьте и обновите свои SDK и библиотеки
Убедитесь, что ваши сторонние зависимости SDK поддерживают API 31: некоторые поставщики SDK публикуют его в своем манифесте; Другие потребуют дополнительного расследования. Если вы используете SDK, который не поддерживает API 31, сделайте это приоритетом для работы с поставщиком SDK для решения этой проблемы.
Кроме того, обратите внимание, что ваше приложение или targetSdkVersion
вашего приложения или игры может ограничить доступ к частным библиотекам платформы Android; См. Приложения NDK, ссылаясь на библиотеки платформ для деталей.
Вы также должны проверить любые ограничения, которые могут существовать в версии библиотеки поддержки Android, которую вы используете. Как всегда, вы должны обеспечить совместимость между основной версией библиотеки поддержки Android и compileSdkVersion
вашего приложения.
Мы рекомендуем вам выбрать targetSdkVersion
, меньшее, чем или равное основной версии библиотеки поддержки. Мы рекомендуем вам обновить недавнюю библиотеку совместимой поддержки, чтобы воспользоваться последними функциями совместимости и исправлениями ошибок.
Протестируйте свое приложение
После обновления уровня и функций API вашего приложения вам следует проверить некоторые основные варианты использования. Следующие предложения не являются исчерпывающими, но стремятся направить процесс тестирования. Мы предлагаем тестирование:
- Что ваше приложение компилируется в API 29 без ошибок или предупреждений.
Что в вашем приложении есть стратегия для случаев, когда пользователь отклоняет запросы на разрешение, и побуждает пользователя разрешения. Для этого:
- Перейдите на экран информации о приложении вашего приложения и отключите каждое разрешение.
- Откройте приложение и убедитесь, что нет сбоев.
- Выполните тесты на использование основных вариантов и убедитесь, что требуемые разрешения будут переоборудованы.
Рыряет доуз с ожидаемыми результатами и без ошибок.
- Используя ADB, поместите ваше тестовое устройство в Doze во время работы вашего приложения.
- Проверьте любые варианты использования, которые запускают сообщения об обмене облачными сообщениями Firebase.
- Проверьте любые варианты использования, которые используют аварийные сигналы или задания.
- Устранить любые зависимости от фоновых услуг.
- Установите свое приложение в резервную речь
- Проверьте любые варианты использования, которые запускают сообщения об обмене облачными сообщениями Firebase.
- Проверьте любые варианты использования, которые используют аварийные сигналы.
- Используя ADB, поместите ваше тестовое устройство в Doze во время работы вашего приложения.
Обрабатывает новые фотографии / видео, снятые
- Убедитесь, что ваше приложение обрабатывает ограниченное
ACTION_NEW_PICTURE
иACTION_NEW_VIDEO
, правильно транслируется (то есть перенесено на задание Jobscheduler). - Убедитесь, что любые критические варианты использования, которые зависят от этих событий, все еще работают.
- Убедитесь, что ваше приложение обрабатывает ограниченное
Обрабатывает совместные файлы с другими приложениями - протестируйте любой случай использования, который делится файлами данных с любым другим приложением (даже другое приложение от того же разработчика)
- Проверьте контент, виден в другом приложении и не запускает сбои.
Дополнительная информация
Выберите электронные письма в консоли Google Play, чтобы мы могли отправить вам важные обновления и объявления от Android и Google Play, включая нашу ежемесячную бюллетени для партнеров.