Загружаемый 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 или входящие в состав APK-файлов, предназначенных для ОС Android Automotive.
Зачем ориентироваться на новые 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 убедитесь, что ваши фильтры намерений включают категорию ПРОСМОТР и поддерживают схему 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 и более поздних версий платформы:
Режим сна и режим ожидания приложения
Разработка поведений, описанных в разделе «Оптимизация для режима ожидания и режима ожидания приложений» , который включает в себя дополнительные изменения, внесенные в несколько выпусков платформы.
Когда устройство находится в режиме ожидания и режиме ожидания приложения, система ведет себя следующим образом:
- Ограничивает доступ к сети
- Откладывает сигналы тревоги, синхронизацию и задания
- Ограничивает сканирование GPS и Wi-Fi.
- Ограничивает сообщения Firebase Cloud Messaging с обычным приоритетом.
Изменения разрешений
- Система ограничивает доступ к личным каталогам приложений.
- Предоставление URI
file://
за пределами вашего приложения вызывает исключение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 или 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
, который автоматически помещает приложение в почтовый ящик с более узкими соотношениями сторон.
- Несколько действий теперь могут находиться в состоянии «возобновлено» одновременно, но фактически только одно из них имеет фокус.
- Изменения конфиденциальности
- Ограниченное хранилище
- Доступ к внешнему хранилищу ограничен только каталогом приложения и определенными типами носителей, созданными приложением.
- Ограниченный доступ к местоположению, пока приложение работает в фоновом режиме, требуется разрешение
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 Signature Scheme v1.
- Ограничение интерфейса, не связанного с SDK. Использование интерфейсов, отличных от SDK, не рекомендуется для приложений, ориентированных на уровень API 30, поскольку некоторые из этих интерфейсов, отличных от SDK, теперь заблокированы. Полный список заблокированных интерфейсов, отличных от SDK, см. в разделе Интерфейсы, не относящиеся к 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. Как всегда, вы должны обеспечить совместимость между основной версией библиотеки поддержки Android и compileSdkVersion
вашего приложения.
Мы рекомендуем вам выбрать targetSdkVersion
, меньший или равный основной версии библиотеки поддержки. Мы рекомендуем вам обновить последнюю совместимую библиотеку поддержки, чтобы воспользоваться новейшими функциями совместимости и исправлениями ошибок.
Проверьте свое приложение
После того как вы соответствующим образом обновите уровень API и функции вашего приложения, вам следует протестировать некоторые основные варианты использования. Следующие предложения не являются исчерпывающими, но призваны помочь вам в процессе тестирования. Мы предлагаем протестировать:
- Что ваше приложение компилируется в API 29 без ошибок и предупреждений.
Что в вашем приложении есть стратегия для случаев, когда пользователь отклоняет запросы на разрешения и запрашивает у пользователя разрешения. Для этого:
- Перейдите на экран «Информация о приложении» вашего приложения и отключите все разрешения.
- Откройте приложение и убедитесь в отсутствии сбоев.
- Выполните основные тесты сценариев использования и убедитесь, что требуемые разрешения запрашиваются повторно.
Обрабатывает Doze с ожидаемыми результатами и без ошибок.
- Используя adb, поместите тестовое устройство в Doze, пока ваше приложение работает.
- Протестируйте все варианты использования, которые вызывают сообщения Firebase Cloud Messaging.
- Протестируйте все варианты использования, в которых используются сигналы тревоги или задания.
- Устраните любые зависимости от фоновых служб.
- Переведите свое приложение в режим ожидания приложения
- Протестируйте все варианты использования, которые вызывают сообщения Firebase Cloud Messaging.
- Протестируйте все варианты использования, в которых используются сигналы тревоги.
- Используя adb, поместите тестовое устройство в Doze, пока ваше приложение работает.
Обрабатывает новые фотографии/видео
- Убедитесь, что ваше приложение правильно обрабатывает ограниченные трансляции
ACTION_NEW_PICTURE
иACTION_NEW_VIDEO
(т. е. перемещается в задания JobScheduler). - Убедитесь, что все критические варианты использования, зависящие от этих событий, по-прежнему работают.
- Убедитесь, что ваше приложение правильно обрабатывает ограниченные трансляции
Обеспечивает обмен файлами с другими приложениями. Протестируйте любой вариант использования, при котором данные файла используются совместно с любым другим приложением (даже с другим приложением того же разработчика).
- Проверьте, чтобы контент был виден в другом приложении и не вызывал сбоев.
Дополнительная информация
Подпишитесь на электронную рассылку в консоли Google Play, чтобы мы могли отправлять вам важные обновления и объявления из 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 или входящие в состав APK-файлов, предназначенных для ОС Android Automotive.
Зачем ориентироваться на новые 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 убедитесь, что ваши фильтры намерений включают категорию ПРОСМОТР и поддерживают схему 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 и более поздних версий платформы:
Режим сна и режим ожидания приложения
Разработка поведений, описанных в разделе «Оптимизация для режима ожидания и режима ожидания приложений» , который включает в себя дополнительные изменения, внесенные в несколько выпусков платформы.
Когда устройство находится в режиме ожидания и режиме ожидания приложения, система ведет себя следующим образом:
- Ограничивает доступ к сети
- Откладывает сигналы тревоги, синхронизацию и задания
- Ограничивает сканирование GPS и Wi-Fi.
- Ограничивает сообщения Firebase Cloud Messaging с обычным приоритетом.
Изменения разрешений
- Система ограничивает доступ к личным каталогам приложений.
- Предоставление URI
file://
за пределами вашего приложения вызывает исключение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 или 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
, который автоматически помещает приложение в почтовый ящик с более узкими соотношениями сторон.
- Несколько действий теперь могут находиться в состоянии «возобновлено» одновременно, но фактически только одно из них имеет фокус.
- Изменения конфиденциальности
- Ограниченное хранилище
- Доступ к внешнему хранилищу ограничен только каталогом приложения и определенными типами носителей, созданными приложением.
- Ограниченный доступ к местоположению, пока приложение работает в фоновом режиме, требуется разрешение
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, включая нашу ежемесячную бюллетени для партнеров.
,Когда вы загружаете APK, он должен соответствовать требованиям API Google Play.
Начиная с 31 августа 2024 года:
- Новые приложения и обновления приложений должны быть нацелены на Android 14 (API -уровень 34) или выше, чтобы быть отправленным в Google Play; За исключением приложений для Android OS и Android TV, которые должны ориентироваться на Android 13 (API -уровень 33) или выше.
- Существующие приложения должны нацелиться на Android 13 (API -уровне 33) или выше, чтобы оставаться доступными для новых пользователей на устройствах с помощью ОС Android выше, чем целевой уровень API вашего приложения. Приложения, которые нацелены на Android 12 (API -уровень 31) или ниже (Android 10 (API -уровни 29) или ниже для ОС Wear и Android 11 (уровень API 30) или ниже для Android TV), будут доступны только на устройствах, работающих на ОС Android, которые одинаковы или ниже, чем уровень API API вашего приложения.
Вы сможете запросить продление до 1 ноября 2024 года, если вам нужно больше времени для обновления вашего приложения. Вы сможете получить доступ к формам расширения вашего приложения в игровой консоли в конце этого года.
Исключения из этих требований включают в себя:
- Постоянно частные приложения, которые ограничены пользователями в конкретной организации и предназначены только для внутреннего распространения.
- Приложения, которые нацелены на Android Automotive OS, или упакованы с APK, нацеленными на Android Automotive OS.
Зачем нацелиться на новые SDK?
Каждая новая версия Android вводит изменения, которые обеспечивают улучшение безопасности и производительность и улучшают пользовательский опыт Android. Некоторые из этих изменений применяются только к приложениям, которые явно заявляют о поддержке через их атрибут targetSdkVersion
Manifest (также известный как целевой уровень 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
Promisions. Вам больше не нужно делать запросы на прочтку выполненияLOCATION
на операции Bluetooth. - Местоположение: Пользователи могут запросить приложения для получения только приблизительной информации о местоположении. Вы должны запросить разрешение
ACCESS_COARSE_LOCATION
в любое время, когда вы запроситеACCESS_FINE_LOCATION
.- Фильтры намерения: если ваше приложение содержит действия , услуги или вещательные приемники , которые используют фильтры намерения , вы должны явно объявить Android: экспортированный атрибут для этих компонентов.
- Спячка: приложения могут быть помещены в режим спячки, если они не используются в течение определенного периода времени. В режиме сгибания разрешения на выполнение вашего приложения и кэш сброшены, и вы не можете запускать задания или оповещения. Вы можете проверить статус спящего приложения .
- В ожидании намерения изменяют : вы должны указать изменяемость каждого объекта, который создает ваше приложение.
Пользовательский опыт
- Пользовательские уведомления : уведомления с пользовательскими представлениями контента больше не будут использовать полную область уведомления; Вместо этого система применяет стандартный шаблон. Этот шаблон гарантирует, что пользовательские уведомления имеют одинаковое украшение, что и другие уведомления во всех штатах. Такое поведение почти идентично поведению
Notification.DecoratedCustomViewStyle
DecoratedCustomViewStyle. - Приложение Android ссылки на проверку изменений : при использовании проверки ссылки на Android убедитесь, что ваши фильтры намерения включают категорию для просмотра и поддерживают схему 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 и APP STANBY
Дизайн для поведения, описанный в оптимизации для Doze и App Satchby , который охватывает постепенные изменения, введенные в нескольких выпусках платформы.
Когда устройство находится в режиме режима Doze и App, система ведет себя следующим образом:
- Ограничивает доступ к сети
- Определяет сигналы тревоги, синхронизации и рабочих мест
- Ограничивает сканы GPS и Wi-Fi
- Ограничивает нормальные приоритетные сообщения общего обмена сообщениями.
Изменения разрешения
- Система ограничивает доступ к частным каталогам приложения.
- Распределение
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 требует версии 10.2.1 SDK Google Play Services или выше.
- При использовании сообщений Firebase облачные сообщения доставка сообщений подлежит лимитам выполнения фона. Когда фоновая работа необходима при получении сообщений, например, для выполнения синхронизации фоновых данных, ваше приложение должно запланировать задания, используя вместо этого диспетчер вакансий или JobintentEntentservice. Для получения дополнительной информации см. Документацию об обмене обменом обменом Firebase .
-
- Неявные трансляции
- Неявные трансляции ограничены. Для получения информации об обработке фоновых явлений см. Документацию для API
JobScheduler
.
- Неявные трансляции ограничены. Для получения информации об обработке фоновых явлений см. Документацию для API
- Фоновые пределы расположения
- Приложения, работающие в фоновом режиме, имеют ограниченный доступ к данным местоположения.
- На устройствах с Google Play Services используйте поставщик плавного местоположения , чтобы получить периодические обновления местоположения.
- Приложения, работающие в фоновом режиме, имеют ограниченный доступ к данным местоположения.
- Система ограничивает услуги для приложений, не работающих на переднем плане.
- Каналы уведомления
- Вы должны определить свойства прерывания уведомлений на каждом канале.
- Вы должны назначить уведомления каналу для появления уведомлений.
- Эта версия платформы поддерживает
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
, который автоматически питает приложение на более узких соотношениях сторон.
- Многочисленные действия теперь могут быть в «возобновляемом» состоянии одновременно, но только один на самом деле сосредоточен.
- Замена конфиденциальности
- Ограниченное хранилище
- Внешнее доступ к хранилищу ограничен только специфичным для приложения каталог и определенными типами носителя, которые создало приложение.
- Ограниченный доступ к местоположению, пока приложение находится в фоновом режиме, требуя разрешения
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)
- Конфиденциальность
- Обеспечение применения хранилища : приложения должны принять модель хранения Scoped, где приложение, медиа и другие типы файлов сохраняются и доступны с использованием выделенных местоположений.
- Разрешения Auto-Reset : Если пользователи не взаимодействовали с приложением в течение нескольких месяцев, система автоматически разрешает конфиденциальные разрешения приложения. Это не должно влиять на большинство приложений. Если ваше приложение работает в основном в фоновом режиме без взаимодействий с пользователями, вы можете рассмотреть вопрос о том, чтобы попросить пользователей отключить автоматическое сброс.
- Доступ к месту фонового местоположения : приложения должны запросить передний план и разрешение на местоположение фонового расположения отдельно. Предоставление доступа к фоновому местоположению может быть сделано только в настройках приложения вместо диалогов разрешения времени выполнения.
- Видимость пакета : Когда приложение запросы для списка установленных приложений и сервисов на устройстве возвращается, отфильтрован.
- Если вы используете услуги по признанию текста в речь или речи , вам нужно будет добавить запросы для услуг в манифестный файл.
- Безопасность
- Сжатые файлы `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, включая нашу ежемесячную бюллетени для партнеров.
,Когда вы загружаете APK, он должен соответствовать требованиям API Google Play.
Начиная с 31 августа 2024 года:
- Новые приложения и обновления приложений должны быть нацелены на Android 14 (API -уровень 34) или выше, чтобы быть отправленным в Google Play; За исключением приложений для Android OS и Android TV, которые должны ориентироваться на Android 13 (API -уровень 33) или выше.
- Существующие приложения должны нацелиться на Android 13 (API -уровне 33) или выше, чтобы оставаться доступными для новых пользователей на устройствах с помощью ОС Android выше, чем целевой уровень API вашего приложения. Приложения, которые нацелены на Android 12 (API -уровень 31) или ниже (Android 10 (API -уровни 29) или ниже для ОС Wear и Android 11 (уровень API 30) или ниже для Android TV), будут доступны только на устройствах, работающих на ОС Android, которые одинаковы или ниже, чем уровень API API вашего приложения.
Вы сможете запросить продление до 1 ноября 2024 года, если вам нужно больше времени для обновления вашего приложения. Вы сможете получить доступ к формам расширения вашего приложения в игровой консоли в конце этого года.
Исключения из этих требований включают в себя:
- Постоянно частные приложения, которые ограничены пользователями в конкретной организации и предназначены только для внутреннего распространения.
- Приложения, которые нацелены на Android Automotive OS, или упакованы с APK, нацеленными на Android Automotive OS.
Зачем нацелиться на новые SDK?
Каждая новая версия Android вводит изменения, которые обеспечивают улучшение безопасности и производительность и улучшают пользовательский опыт Android. Некоторые из этих изменений применяются только к приложениям, которые явно заявляют о поддержке через их атрибут targetSdkVersion
Manifest (также известный как целевой уровень 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
Promisions. Вам больше не нужно делать запросы на прочтку выполненияLOCATION
на операции Bluetooth. - Местоположение: Пользователи могут запросить приложения для получения только приблизительной информации о местоположении. Вы должны запросить разрешение
ACCESS_COARSE_LOCATION
в любое время, когда вы запроситеACCESS_FINE_LOCATION
.- Фильтры намерения: если ваше приложение содержит действия , услуги или вещательные приемники , которые используют фильтры намерения , вы должны явно объявить Android: экспортированный атрибут для этих компонентов.
- Спячка: приложения могут быть помещены в режим спячки, если они не используются в течение определенного периода времени. В режиме сгибания разрешения на выполнение вашего приложения и кэш сброшены, и вы не можете запускать задания или оповещения. Вы можете проверить статус спящего приложения .
- В ожидании намерения изменяют : вы должны указать изменяемость каждого объекта, который создает ваше приложение.
Пользовательский опыт
- Пользовательские уведомления : уведомления с пользовательскими представлениями контента больше не будут использовать полную область уведомления; Вместо этого система применяет стандартный шаблон. Этот шаблон гарантирует, что пользовательские уведомления имеют одинаковое украшение, что и другие уведомления во всех штатах. Такое поведение почти идентично поведению
Notification.DecoratedCustomViewStyle
DecoratedCustomViewStyle. - Приложение Android ссылки на проверку изменений : при использовании проверки ссылки на Android убедитесь, что ваши фильтры намерения включают категорию для просмотра и поддерживают схему 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 и APP STANBY
Дизайн для поведения, описанный в оптимизации для Doze и App Satchby , который охватывает постепенные изменения, введенные в нескольких выпусках платформы.
Когда устройство находится в режиме режима Doze и App, система ведет себя следующим образом:
- Ограничивает доступ к сети
- Определяет сигналы тревоги, синхронизации и рабочих мест
- Ограничивает сканы GPS и Wi-Fi
- Ограничивает нормальные приоритетные сообщения общего обмена сообщениями.
Изменения разрешения
- The system restricts access to app private directories.
- Exposing a
file://
URI outside of your app triggers aFileUriExposedException
. If you need to share files outside of your app, implementFileProvider
The system forbids linking to non-NDK libraries.
For an exhaustive list of changes introduced in Android 7.0 (API level 24), see the Behavior Changes page for that version of the platform.
Continue by following the instructions in the next section.
Migrate to Android 8 (API level 26)
The following considerations apply to apps targeting Android 8.0 and higher versions of the platform:
- Background Execution Limits
- The system restricts services for apps not running in the foreground.
-
startService()
now throws an exception when an app tries to invoke it whilestartService()
is prohibited. - To start foreground services, an app must use
startForeground()
andstartForegroundService()
. - Carefully review the changes made to the JobScheduler API, as documented on the Android 8.0 (API level 26) Behavior Changes page .
- Firebase Cloud Messaging requires version 10.2.1 of the Google Play services SDK , or higher.
- When using Firebase Cloud Messaging , message delivery is subject to background execution limits. When background work is necessary upon message receipt, such as to perform background data sync, your app should schedule jobs using Firebase Job Dispatcher or JobIntentService instead. For more information, see the Firebase Cloud Messaging documentation .
-
- Implicit broadcasts
- Implicit broadcasts are restricted. For information about handling background events, see the documentation for the
JobScheduler
API.
- Implicit broadcasts are restricted. For information about handling background events, see the documentation for the
- Background Location Limits
- Apps running in the background have limited access to location data.
- On devices with Google Play services, use the fused location provider to get periodic location updates.
- Apps running in the background have limited access to location data.
- The system restricts services for apps not running in the foreground.
- Notification Channels
- You should define notification interruption properties on a per-channel basis.
- You must assign notifications to a channel for the notifications to appear.
- This version of the platform supports
NotificationCompat.Builder
.
- Конфиденциальность
- ANDROID_ID is scoped per app signing key.
For an exhaustive list of changes introduced in Android 8.0 (API level 26), see the Behavior Changes page for that version of the platform.
Migrate from Android 8 (API 26) to Android 9 (API 28)
- Power Management
- App Standby buckets bring new background restrictions based on app engagement, such as deferred jobs, alarms and quotas on high-priority messages
- Battery saver improvements increase the limitations on app standby apps
- Foreground service permission
- Need to request the normal permission
FOREGROUND_SERVICE
(not runtime permission)
- Need to request the normal permission
- Privacy changes
- Limited access to background sensors
- Restricted access to call logs, now in
CALL_LOG
permission group - Restricted access to phone numbers, requiring
READ_CALL_LOG
permission - Restricted access to Wi-Fi information
For an exhaustive list of changes introduced in Android 9.0 (API level 28), see behavior changes .
Migrate from Android 9 (API level 28) to Android 10 (API level 29)
- Notifications with a full-screen intent
- Need to request the normal permission
USE_FULL_SCREEN_INTENT
(not runtime permission).
- Need to request the normal permission
- Support for foldables and large screen devices
- Multiple activities can now be in the "resumed" state at the same time, but only one actually has focus.
- This change affects
onResume()
andonPause()
behavior. - New lifecycle concept of "topmost resumed" which can be detected by subscribing to
onTopResumedActivityChanged()
.- Only one activity can be "topmost resumed."
- This change affects
- When
resizeableActivity
is set tofalse
, apps can additionally specify aminAspectRatio
which automatically letterboxes the app on narrower aspect ratios.
- Multiple activities can now be in the "resumed" state at the same time, but only one actually has focus.
- Privacy changes
- Ограниченное хранилище
- External storage access is limited only to an app-specific directory and to specific types of media that the app has created.
- Restricted access to location while the app is in the background, requiring
ACCESS_BACKGROUND_LOCATION
permission. - Restricted access to non-resettable identifiers such as IMEI and serial number.
- Restricted access to physical activity information such as the user's step count, requiring
ACTIVITY_RECOGNITION
permission. - Restricted access to some telephony, Bluetooth, and Wi-Fi APIs , requiring
ACCESS_FINE_LOCATION
permission. - Restricted access to Wi-Fi settings
- Apps can no longer directly enable or disable Wi-Fi and need to do it using settings panels .
- Restrictions on initiating a connection to a Wi-Fi network, requiring the use of either
WifiNetworkSpecifier
orWifiNetworkSuggestion
.
- Ограниченное хранилище
Migrate from Android 10 (API level 29) to Android 11 (API level 30)
- Конфиденциальность
- Scoped storage enforcement : Apps should adopt the scoped storage model where app-specific, media, and other file types are saved and accessed using dedicated locations.
- Permissions auto-reset : If users haven't interacted with an app for a few months, the system auto-resets the app's sensitive permissions. This shouldn't affect most apps. If your app primarily works in the background without user interactions, you may consider requesting users to disable auto reset.
- Background location access : Apps must request foreground and background location permission separately. Granting access to background location permission can only be done in app settings instead of runtime permission dialogs.
- Package Visibility : When an app queries for the list of installed apps and services on the device, the returned list is filtered.
- If you use Text-to-speech or Speech Recognition services, you will need to add queries elements for services to the manifest file.
- Безопасность
- Compressed `resource.arsc` files are no longer supported
- APK Signature Scheme v2 now required. For backward compatibility reasons, developers should also continue to sign with APK Signature Scheme v1.
- Non-SDK interface restriction. Using non-SDK interfaces is not recommended for apps targeting API level 30, as some of these non-SDK interfaces are now blocked. See Non-SDK interfaces that are now blocked in Android 11 for a comprehensive list of blocked non-SDK interfaces.
For an exhaustive list of changes introduced in Android 11 (API level 30), see the Behavior Changes page.
Continue to update to API 31 by following the instructions in the previous section .
Modernize your apps
As you update the target API level for your apps, consider adopting recent platform features to modernize your apps and delight your users.
- Consider using CameraX , which is in Beta, to make the most of using the camera.
- Use Jetpack components to help you follow best practices, free you from writing boilerplate code, and simplify complex tasks so that you can focus on the code you care about.
- Use Kotlin to write better apps faster, and with less code.
- Ensure you are following privacy requirements and best practices.
- Add dark theme support to your apps.
- Add gesture navigation support to your apps.
- Migrate your app from Google Cloud Messaging (GCM) to the latest version of Firebase Cloud Messaging.
- Take advantage of advanced window management.
- Support larger aspect ratios (more than 16:9) to take advantage of recent advances in hardware. Ensure that your app resizes to fill the available screen space. Only declare a maximum aspect ratio as a last resort. For more information about maximum aspect ratios, see Declare Restricted Screen Support .
- Add multi-window support to help your app increase productivity, and to manage multiple displays .
- If a great minimized app experience would improve the user experience, add support for Picture-in-Picture .
- Optimize for devices with display cutout.
- Don't assume status bar height. Instead, use
WindowInsets
andView.OnApplyWindowInsetsListener
. To learn more, see the droidcon NYC 2017 video. for an explanation. - Don't assume that the app has the entire window. Instead, confirm its location by using
View.getLocationInWindow()
, notView.getLocationOnScreen()
. * When handlingMotionEvent
, useMotionEvent.getX()
andMotionEvent.getY()
, notMotionEvent.getRawX()
,MotionEvent.getRawY()
.
Check and update your SDKs and libraries
Make sure that your third-party SDK dependencies support API 31: Some SDK providers publish it in their manifest; others will require additional investigation. If you use an SDK that doesn't support API 31, make it a priority to work with the SDK provider to resolve the issue.
Additionally, note that your app or game's targetSdkVersion
may restrict access to private Android platform libraries; see NDK Apps Linking to Platform Libraries for details.
You should also verify any restrictions that may exist in the version of the Android Support Library that you're using. As always, you must ensure compatibility between the major version of Android Support Library and your app's compileSdkVersion
.
We recommend that you choose a targetSdkVersion
smaller than or equal to the Support Library's major version. We encourage you to update to a recent compatible Support Library in order to take advantage of the latest compatibility features and bug fixes.
Test your app
After you update your app's API level and features as appropriate, you should test some core use cases. The following suggestions are not exhaustive, but aim to guide your testing process. We suggest testing:
- That your app compiles to API 29 without errors or warnings.
That your app has a strategy for cases where the user rejects permission requests, and prompts the user for permissions. To do so:
- Go to your app's App Info screen, and disable each permission.
- Open the app and ensure no crashes.
- Perform core use case tests and ensure required permissions are re-prompted.
Handles Doze with expected results and no errors.
- Using adb, place your test device into Doze while your app is running.
- Test any use cases that trigger Firebase Cloud Messaging messages.
- Test any use cases that use Alarms or Jobs.
- Eliminate any dependencies on background services.
- Set your app into App Standby
- Test any use cases that trigger Firebase Cloud Messaging messages.
- Test any use cases that use Alarms.
- Using adb, place your test device into Doze while your app is running.
Handles new photos / video being taken
- Check that your app handles the restricted
ACTION_NEW_PICTURE
andACTION_NEW_VIDEO
broadcasts correctly (that is, moved to JobScheduler jobs). - Ensure that any critical use cases that depend on these events still work.
- Check that your app handles the restricted
Handles sharing files to other apps - Test any use case that shares file data with any other app (even another app by the same developer)
- Test the content is visible in the other app and doesn't trigger crashes.
Дополнительная информация
Opt in to emails in the Google Play Console so that we can send you important updates and announcements from Android and Google Play, including our monthly partner newsletter.