Загружаемый 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 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 с обычным приоритетом.
Изменения разрешений
- Система ограничивает доступ к личным каталогам приложений.
- Предоставление
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, включая наш ежемесячный информационный бюллетень для партнеров.