Skip to main content

Android SDK migration

Android 16 (API 36)

ИзмененияЧто делать? (миграция)
Adaptive apps — для приложений с targetSdk API 36 на экранах шириной >600dp запрещено ограничивать ориентацию и resizability. Приложения обязаны быть адаптивными. В 2026 году (API 37) opt-out будет удалён.Проверить layouts на больших экранах, обеспечить корректную работу в любой ориентации. https://developer.android.com/about/versions/16/behavior-changes-16#adaptive-apps
Live Updates — новый класс уведомлений с шаблоном ProgressStyle для отслеживания прогресса (доставка, навигация, поездки). Поддерживает кастомные иконки, сегменты, состояния прогресса.Использовать ProgressStyle notification template для уведомлений с прогрессом. https://developer.android.com/about/versions/16/features#live-updates
Photo picker с облачными сервисами — встроенный photo picker теперь поддерживает облачные источники (Google Photos), поиск по фото и видео, а также улучшенную интеграцию через embedded picker.Обновить интеграцию с photo picker, использовать новые API для embedded picker. https://developer.android.com/about/versions/16/features#photo-picker
Health records API — Health Connect теперь поддерживает чтение/запись медицинских данных в формате FHIR (иммунизация, лабораторные результаты). Требует разрешения READ_MEDICAL_DATA_* и WRITE_MEDICAL_DATA с явным согласием пользователя.Добавить новые permissions в манифест при работе с Health Connect. https://developer.android.com/about/versions/16/features#health-records
Notification cooldown — при массовом поступлении уведомлений система автоматически снижает громкость и приоритет до 2 минут (кроме звонков и будильников).Учитывать при тестировании массовых push-уведомлений. https://developer.android.com/about/versions/16/features#notification-cooldown

Android 15 (API 35)

ИзмененияЧто делать? (миграция)
Edge-to-edge enforcement — приложения с targetSdk 15 отображаются edge-to-edge по умолчанию, контент рисуется за translucent system bars (статусбар и навбар).Необходимо обработать insets через WindowCompat / enableEdgeToEdge() и убедиться, что контент не перекрывается системными элементами. https://developer.android.com/about/versions/15/behavior-changes-15#edge-to-edge
Partial screen sharing — пользователи могут шарить/записывать отдельное приложение вместо всего экрана через MediaProjection.Обновить MediaProjection запросы — использовать новый intent MediaProjectionManager.createScreenCaptureIntent() с поддержкой выбора приложения. https://developer.android.com/about/versions/15/behavior-changes-15#screen-sharing
App archiving — поддержка архивирования/разархивирования приложений на уровне ОС, в том числе для сторонних сторов. Архивированные приложения освобождают место, но сохраняют данные.Поддержать восстановление состояния после unarchive, проверить корректность работы после reinstall. https://developer.android.com/about/versions/15/behavior-changes-15#app-archiving
Private Space — новый режим для изоляции чувствительных приложений в отдельном пространстве с отдельным profile.Учитывать при работе с intents и content providers — приложение может быть запущено в private space с ограниченным доступом. https://developer.android.com/about/versions/15/features#private-space
Sensitive notifications — система скрывает содержимое уведомлений с одноразовыми кодами (OTP) на lockscreen для повышения безопасности.Проверить отображение OTP-уведомлений, при необходимости использовать Notification.Builder с корректной настройкой visibility. https://developer.android.com/about/versions/15/behavior-changes-15#sensitive-notifications

Android 14 (API 34)

ИзмененияЧто делать? (миграция)
Блокировка старых приложений — Android 14 блокирует установку приложений, у которых targetSdk ниже Android 6.0 (API 23). Обойти можно только через ADB флаг.Убедиться, что targetSdk >= 23 (для sideloading). Google Play уже требует более высокий targetSdk. https://developer.android.com/about/versions/14/behavior-changes-14#minimum-target-api-level
Photo picker — пользователь может выбрать конкретные фото для доступа приложению через системный photo picker, вместо выдачи доступа ко всей галерее.Использовать PickVisualMedia contract вместо READ_MEDIA_IMAGES где возможно. https://developer.android.com/about/versions/14/changes/photo-picker
Non-linear font scaling — максимальный размер шрифта увеличен до 200% (было 130%), с нелинейным масштабированием, чтобы крупные элементы не увеличивались слишком сильно.Проверить UI с максимальным масштабированием шрифтов, использовать maxFontSize в sp. https://developer.android.com/about/versions/14/features#non-linear-font-scaling
Frontend-foreground service types — для foreground services с targetSdk 14 необходимо явно указывать тип через foregroundServiceType в манифесте для: camera, connectedDevice, health, location, mediaPlayback, mediaProjection, microphone, phoneCall.Добавить соответствующие foregroundServiceType в манифест для всех foreground services. https://developer.android.com/about/versions/14/changes/fgs-types-required
Grammatical Inflection API — новый API для грамматического рода пользователя (GrammaticalInflectionManager), расширяет per-app language settings.Поддержать в локализации, использовать GrammaticalInflectionManager.setApplicationGrammaticalGender(). https://developer.android.com/about/versions/14/features#grammatical-inflection-api

Android 13 (API 33)

ИзмененияЧто делать? (миграция)
Notification runtime permission — новое runtime разрешение POST_NOTIFICATIONS обязательно для показа уведомлений в Android 13. Без него уведомления блокируются.Запрашивать Manifest.permission.POST_NOTIFICATIONS перед отправкой уведомлений. https://developer.android.com/about/versions/13/changes/notification-permission
Photo picker — новый системный photo picker для выбора фото и видео без необходимости запрашивать READ_EXTERNAL_STORAGE или READ_MEDIA_IMAGES.Использовать ActivityResultContracts.PickVisualMedia() и PickMultipleVisualMedia(). https://developer.android.com/about/versions/13/features/photopicker
Nearby WiFi devices — новый permission NEARBY_WIFI_DEVICES заменяет ACCESS_FINE_LOCATION для операций с WiFi (поиск, подключение). ACCESS_FINE_LOCATION больше не нужен для WiFi.Декларировать NEARBY_WIFI_DEVICES вместо ACCESS_FINE_LOCATION для WiFi-операций. Указать neverForLocation в манифесте, если локация не нужна. https://developer.android.com/about/versions/13/features/nearby-wifi-devices-permission
Per-app language — возможность задать язык для каждого приложения отдельно без изменения системного языка через LocaleManager.Использовать LocaleManager.setApplicationLocales() и добавить android:localeConfig в манифест. https://developer.android.com/about/versions/13/features/app-languages
Foreground service types — для foreground services с targetSdk 13, использующих location, camera или microphone, обязательно указывать foregroundServiceType в манифесте.Добавить foregroundServiceType в декларацию сервиса в манифесте: location, camera, microphone и т.д. https://developer.android.com/about/versions/13/changes/fgs-manager-params

Android 12 (API 31)

ИзмененияЧто делать? (миграция)
Approximate location добавлена возможность для пользователя давать разрешение на получение "приблизительной" информации о местоположении. Android target 12.При запросе runtime разрешения ACCESS_FINE_LOCATION необходимо также автоматически запрашивать ACCESS_COARSE_LOCATION (приблизительная локация) в рамках одного запроса разрешения. https://developer.android.com/about/versions/12/approximate-location
App hibernation - target Android 12, если пользователь напрямую не взаимодействует с приложением "несколько" месяцев, система автоматически отменяет выданные разрешения и помещает приложение в "hibernation state", в котором приложение не может запускать jobs и alerts в фоне, не может получать нотификации, включая высокоприоритетные, и система оптимизирует память - автоматически очищается файловый кэш приложения.Миграция не нужна, но нужно учитывать возможное наличие такого состояния приложения. Также можно избежать переход в состояние спячки, для этого необходимо послать пользователю запрос Intent.ACTION_APPLICATION_DETAILS_SETTINGS. https://developer.android.com/about/versions/12/behavior-changes-12#app-hibernation
Motion sensors are rate-limited - появились ограничения на частоту запроса данных сенсоров движения: акселерометра, гироскопа и геомагнитного датчикаДля получения доступа к датчикам с более высокой частотой необходимо декларировать разрешение HIGH_SAMPLING_RATE_SENSORS. https://developer.android.com/about/versions/12/behavior-changes-12#motion-sensor-rate-limiting

Android 11 (API 30)

С августа 2021 все новые приложения и с ноября 2021 все обновления существующих приложений должны использовать targetSdk 30.

ИзмененияЧто делать? (миграция)
Scoped storage enforcement влияет на приложения с target Android 11 или выше и на target Android 10 без requestLegacyExternalStorage = true в манифесте приложения (флаг android:requestLegacyExternalStorage будет игнорироваться). Принудительное использование Scoped Storage.https://developer.android.com/about/versions/11/privacy/storage , https://nuancesprog.ru/p/10404/ (ru)
One-time permissions: с target Android 11 и выше, которые используют геоданные (локация), микрофон, камеру. Юзер может выдать временное (одноразовое) разрешение к ресурсу
Permissions auto-reset с target Android 11 и выше. Если юзер не взаимодействовал с приложением несколько месяцев (в доке не указано сколько!), то ОС автоматически обнуляет ранее выданные runtime разрешения (sensitive runtime permissions).Миграция не нужна, если в приложении корректно реализован код с запросом runtime разрешений
Background location access с target Android 11 и выше для приложений, для которых нужен доступ к фоновой геолокации (android.permission.ACCESS_BACKGROUND_LOCATION)Гайды, как запрашивать доступ к фоновой геолокации https://developer.android.com/training/location/permissions#request-background-location, https://developer.android.com/training/location/background
Package visibility: Для всех приложений с targetSdk Android 11 (API level 30) и выше - теперь нельзя получить доступ к информации обо всех приложениях. Теперь надо явно указать, какие приложения должны быть доступны, или объявить специальное разрешение QUERY_ALL_PACKAGES и проходить процедуру одобрения в Google Play.Подробности https://developer.android.com/training/package-visibility , https://medium.com/androiddevelopers/package-visibility-in-android-11-cc857f221cd9
Foreground services: с targetSdk Android 11 и выше теперь для foreground сервисов, которые используют ресурсы камеры, микрофона или локации - в манифесте обязательно нужно указывать, какой ресурс используется в сервисе, через флаг android:foregroundServiceTypeИзменения по foreground-services https://developer.android.com/about/versions/11/privacy/foreground-services
Custom Toast запрещены кастомные toasts-

Android 10 (API 29)

Изменения с миграцией: https://buffer.com/resources/getting-buffer-publish-ready-for-android-10/

Официальная дока: https://developer.android.com/about/versions/10

ИзмененияЧто делать? (миграция)
Scoped storage влияет на приложения, которые получают доступ и шарят файлы в external storage. Для чтения медиафайлов через MediaStore нужно разрешение READ_EXTERNAL_STORAGE (если нужен доступ к файлам других приложений)Информация про scoped storage https://developer.android.com/about/versions/10/privacy/changes#scoped-storage
More user control over location permissions: для приложений, которые получают доступ к локации в background, нужно разрешение в манифесте ACCESS_BACKGROUND_LOCATION.https://developer.android.com/about/versions/10/privacy/changes#app-access-device-location
Background activity starts ограничения на запуск активити в background. Теперь активити можно запускать только непосредственно в результате взаимодействия с пользователем (автоматически в фоне запускать активити не получится)https://developer.android.com/about/versions/10/privacy/changes#background-activity-starts
Non-resettable hardware identifiers Ограничения на доступ к серийному номеру устройства и IMEI, которые теперь нельзя получитьУ сторонних приложений доступ к данной информации теперь ограничен https://developer.android.com/about/versions/10/privacy/changes#non-resettable-device-ids
Permission for wireless scanning: Доступ к некоторым методам сканирования на основе Wi-Fi или Bluetooth теперь требует получения разрешения ACCESS_FINE_LOCATIONhttps://developer.android.com/about/versions/10/privacy/changes#location-telephony-bluetooth-wifi