При загрузке APK-файла он должен соответствовать требованиям Google Play к уровню целевого API .
Начиная с 31 августа 2025 года:
- Для публикации в Google Play новые приложения и обновления приложений должны быть ориентированы на Android 15 (уровень API 35) или выше; за исключением приложений для Wear OS, Android Automotive OS и Android TV, которые должны быть ориентированы на Android 14 (уровень API 34) или выше.
- Существующие приложения должны быть ориентированы на Android 14 (уровень API 34) или выше, чтобы оставаться доступными для новых пользователей на устройствах с ОС Android более высокого уровня, чем целевой уровень API вашего приложения. Приложения, ориентированные на Android 13 (уровень API 33) или ниже, включая Android 12 (уровень API 31) или ниже для Wear OS и Android TV, будут доступны только на устройствах с ОС Android, уровень API которых равен или ниже целевого уровня API вашего приложения.
Если вам потребуется больше времени для обновления приложения, вы сможете запросить продление срока до 1 ноября 2025 года. Доступ к формам продления срока обновления приложения в Play Console появится позже в этом году.
Исключения из этих требований включают:
- Постоянно закрытые приложения, доступ к которым ограничен пользователями конкретной организации и которые предназначены только для внутреннего распространения.
Почему стоит ориентироваться на более новые SDK?
Каждая новая версия Android вносит изменения, которые улучшают безопасность и производительность, а также повышают удобство использования Android. Некоторые из этих изменений применяются только к приложениям, которые явно заявляют о поддержке через атрибут targetSdkVersion в манифесте (также известный как целевой уровень API).
Настройка вашего приложения на использование новейшего уровня API гарантирует, что пользователи смогут воспользоваться этими улучшениями, при этом ваше приложение сможет работать и на более старых версиях Android. Использование новейшего уровня API также позволяет вашему приложению использовать последние возможности платформы, чтобы порадовать пользователей. Кроме того, начиная с Android 10 (уровень API 29), пользователи видят предупреждение при первом запуске приложения, если приложение ориентировано на Android 5.1 (уровень API 22) или ниже.
В этом документе освещены важные моменты, которые необходимо знать при обновлении целевого уровня API для соответствия требованиям Google Play . Инструкции приведены в следующих разделах в зависимости от версии, на которую вы переходите.
Перейдите с Android 12 и выше (уровень API 31) на более новую версию.
Чтобы обновить приложение для работы с более новой версией Android, выполните следующие действия, указанные в списке изменений поведения:
- Изменения в поведении Android 13
- Изменения в поведении Android 14
- Изменения в поведении Android 15
- Изменения в поведении Android 16
Переход с Android 11 (уровень API 30) на Android 12 (уровень API 31)
Безопасность и разрешения
- Bluetooth : Необходимо заменить объявления разрешений
BLUETOOTHиBLUETOOTH_ADMINна разрешенияBLUETOOTH_SCAN,BLUETOOTH_ADVERTISEилиBLUETOOTH_CONNECT. Запросы на получение разрешенийLOCATIONво время выполнения для операций Bluetooth больше не требуются. - Местоположение: Пользователи могут запрашивать у приложений только приблизительную информацию о местоположении. Необходимо запрашивать разрешение
ACCESS_COARSE_LOCATIONкаждый раз, когда вы запрашиваетеACCESS_FINE_LOCATION.- Фильтры намерений: Если ваше приложение содержит действия , службы или широковещательные приемники , использующие фильтры намерений , необходимо явно указать атрибут android:exported для этих компонентов.
- Режим гибернации: Приложения могут быть переведены в режим гибернации, если они не используются в течение определенного периода времени. В режиме гибернации права доступа и кэш вашего приложения сбрасываются, и вы не можете запускать задания или оповещения. Вы можете проверить статус гибернации вашего приложения .
- Изменяемость ожидающих намерений : Необходимо указать изменяемость каждого объекта PendingIntent, создаваемого вашим приложением.
Пользовательский опыт
- Пользовательские уведомления : Уведомления с пользовательскими представлениями содержимого больше не будут использовать всю область уведомления; вместо этого система применяет стандартный шаблон. Этот шаблон гарантирует, что пользовательские уведомления будут иметь одинаковое оформление, как и другие уведомления, во всех состояниях. Это поведение практически идентично поведению
Notification.DecoratedCustomViewStyle. - Изменения в проверке ссылок в приложениях Android : При использовании проверки ссылок в приложениях Android убедитесь, что ваши фильтры намерений включают категорию BROWSABLE и поддерживают схему HTTPS.
Производительность
Ограничения на запуск служб переднего плана : для Android 12 и выше ваше приложение не может запускать службы переднего плана, пока оно работает в фоновом режиме, за исключением нескольких особых случаев. Если приложение попытается запустить службу переднего плана, работая в фоновом режиме, возникнет исключение (за исключением нескольких особых случаев).
Рассмотрите возможность использования WorkManager для планирования и запуска срочных задач, пока ваше приложение работает в фоновом режиме. Для выполнения срочных действий, запрошенных пользователем, запускайте службы переднего плана точно в назначенное время.
Ограничения, связанные с функцией «трамплина уведомлений» : Когда пользователи нажимают на уведомления, некоторые приложения реагируют, запуская компонент приложения, который инициирует действие, которое пользователь видит и с которым взаимодействует. Этот компонент приложения известен как «трамплин уведомлений».
Приложения не должны запускать действия из служб или широковещательных приемников, используемых в качестве «трамплинов» для уведомлений. После того, как пользователь нажмет на уведомление или кнопку действия внутри уведомления, ваше приложение не может вызывать
startActivity()внутри службы или широковещательного приемника.
Ознакомьтесь с полным списком изменений, затрагивающих приложения, ориентированные на Android 12 (уровень API 31) .
Переход с версий Android ниже 11 (уровень API 30)
Выберите версию Android, с которой вы будете переходить:
Переход на Android 5 (уровень API 21)
Чтобы убедиться, что ваше приложение учло изменения, внесенные в этих версиях, ознакомьтесь с соответствующей страницей «Изменения в поведении» для каждой из следующих версий:
Продолжите, следуя инструкциям в следующем разделе.
Переход на Android 6 (уровень API 23)
Следующие рекомендации относятся к приложениям, ориентированным на Android 6.0 и более поздние версии платформы:
Разрешения во время выполнения
Опасные разрешения предоставляются только во время выполнения. Ваши сценарии взаимодействия с пользовательским интерфейсом должны предусматривать возможности для предоставления таких разрешений.
По возможности убедитесь, что ваше приложение готово обрабатывать отклонения запросов на предоставление разрешений. Например, если пользователь отклоняет запрос на доступ к GPS устройства, убедитесь, что ваше приложение имеет другой способ продолжить работу.
Полный список изменений, внесенных в Android 6.0 (уровень API 23), см. на странице «Изменения в поведении» для этой версии платформы.
Продолжите, следуя инструкциям в следующем разделе.
Переход на Android 7 (уровень API 24)
Следующие рекомендации относятся к приложениям, ориентированным на Android 7.0 и более поздние версии платформы:
Режимы «Отключение» и «Ожидание приложений»
Разработка с учетом особенностей поведения, описанных в разделе «Оптимизация для режимов Doze и App Standby» , который охватывает поэтапные изменения, внесенные в ходе нескольких релизов платформы.
Когда устройство находится в режиме Doze и режиме ожидания приложений, система ведет себя следующим образом:
- Ограничивает доступ к сети
- Откладывает срабатывание оповещений, синхронизацию и выполнение заданий.
- Ограничивает сканирование 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 требуется версия 10.2.1 SDK сервисов Google Play или выше.
- При использовании Firebase Cloud Messaging доставка сообщений ограничена лимитами фонового выполнения. Если после получения сообщения необходима фоновая работа, например, для синхронизации данных в фоновом режиме, ваше приложение должно планировать задачи с помощью Firebase Job Dispatcher или JobIntentService. Для получения дополнительной информации см. документацию Firebase Cloud Messaging .
- Теперь
- Неявные трансляции
- Неявные широковещательные сообщения ограничены. Информацию об обработке фоновых событий см. в документации по API
JobScheduler.
- Неявные широковещательные сообщения ограничены. Информацию об обработке фоновых событий см. в документации по API
- Ограничения местоположения в фоновом режиме
- Приложения, работающие в фоновом режиме, имеют ограниченный доступ к данным о местоположении.
- На устройствах с сервисами Google Play используйте объединенный поставщик данных о местоположении для получения периодических обновлений местоположения.
- Приложения, работающие в фоновом режиме, имеют ограниченный доступ к данным о местоположении.
- Система ограничивает доступ к сервисам для приложений, не работающих в фоновом режиме.
- Каналы уведомлений
- Свойства прерывания уведомлений следует определять для каждого канала отдельно.
- Для того чтобы уведомления отображались, необходимо назначить каналу соответствующий канал.
- Эта версия платформы поддерживает
NotificationCompat.Builder.
- Конфиденциальность
- Параметр ANDROID_ID применяется к ключу подписи приложения.
Полный список изменений, внесенных в Android 8.0 (уровень API 26), см. на странице «Изменения в поведении» для этой версии платформы.
Переход с Android 8 (API 26) на Android 9 (API 28)
- Управление питанием
- В режиме ожидания приложений вводятся новые фоновые ограничения, основанные на активности приложения, такие как отложенные задачи, оповещения и квоты на сообщения с высоким приоритетом.
- Улучшения в режиме энергосбережения увеличивают ограничения для приложений, работающих в режиме ожидания.
- Разрешение для службы переднего плана
- Необходимо запросить стандартное разрешение
FOREGROUND_SERVICE(не разрешение времени выполнения).
- Необходимо запросить стандартное разрешение
- Изменения в политике конфиденциальности
- Ограниченный доступ к фоновым датчикам
- Ограниченный доступ к журналам звонков теперь находится в группе разрешений
CALL_LOG - Ограниченный доступ к телефонным номерам, требующий разрешения
READ_CALL_LOG - Ограниченный доступ к информации о Wi-Fi.
Полный список изменений, внесенных в Android 9.0 (уровень API 28), см. в разделе «Изменения в поведении» .
Переход с Android 9 (уровень API 28) на Android 10 (уровень API 29)
- Уведомления с полноэкранным намерением
- Необходимо запросить обычное разрешение
USE_FULL_SCREEN_INTENT(а не разрешение, действующее во время выполнения).
- Необходимо запросить обычное разрешение
- Поддержка складных устройств и устройств с большим экраном.
- Теперь несколько действий могут одновременно находиться в состоянии «возобновлено», но в фокусе находится только одно из них.
- Это изменение затрагивает поведение функций
onResume()иonPause(). - Новая концепция жизненного цикла "самое верхнее возобновление", которую можно обнаружить, подписавшись на метод
onTopResumedActivityChanged().- Возобновить можно только одно действие.
- Это изменение затрагивает поведение функций
- Если
resizeableActivityустановлен вfalse, приложения могут дополнительно указатьminAspectRatio, которое автоматически уменьшает масштаб приложения при более узком соотношении сторон.
- Теперь несколько действий могут одновременно находиться в состоянии «возобновлено», но в фокусе находится только одно из них.
- Изменения в политике конфиденциальности
- Ограниченное хранение
- Доступ к внешнему хранилищу ограничен только каталогом, принадлежащим приложению, и определенными типами носителей, созданными этим приложением.
- Доступ к местоположению ограничен, пока приложение работает в фоновом режиме, для этого требуется разрешение
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 версии 2. В целях обеспечения обратной совместимости разработчикам следует продолжать использовать схему подписи APK версии 1.
- Ограничение на использование интерфейсов, не относящихся к SDK. Использование интерфейсов, не относящихся к SDK, не рекомендуется для приложений, ориентированных на уровень API 30, поскольку некоторые из этих интерфейсов теперь заблокированы. Полный список заблокированных интерфейсов, не относящихся к 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 Console , чтобы мы могли отправлять вам важные обновления и объявления от Android и Google Play, включая нашу ежемесячную рассылку от партнеров.