Миграция мобильного приложения на новую версию Android SDK
Google Play с 31 августа 2024 года требует, чтобы новые приложения и обновления таргетировали минимум Android 14 (API 34). Что было приемлемым таргетом год назад — сегодня блокирует публикацию обновления. Миграция SDK — не опциональная задача, а обязательная работа по поддержанию приложения в Play Store.
Но «поднять targetSdkVersion в build.gradle» — это не миграция. Это начало диагностики.
Что реально меняется с повышением targetSdk
При каждом мажорном релизе Android Google добавляет поведенческие изменения, которые вступают в силу только для приложений с соответствующим targetSdkVersion. До повышения приложение работало в «режиме совместимости» и не видело новых ограничений.
API 33 (Android 13) — ключевые изменения:
- Разделённые медиаразрешения:
READ_EXTERNAL_STORAGEбольше не даёт доступ к фото и видео. НужныREAD_MEDIA_IMAGES,READ_MEDIA_VIDEO,READ_MEDIA_AUDIO. Код, который проверял толькоREAD_EXTERNAL_STORAGE— перестаёт работать. -
POST_NOTIFICATIONS— новое разрешение для показа уведомлений. Без явного запроса уведомления не отображаются. Миллионы приложений были тихо «сломаны» в части push-уведомлений после обновления пользователей. - Тематизация иконок —
adaptive-iconсmonochromeслоем.
API 34 (Android 14) — ключевые изменения:
-
SCHEDULE_EXACT_ALARM— implicit grant убран. Пользователь должен явно разрешить точные будильники. - Фоновая активность ограничена сильнее — запуск Activity из фона без видимого уведомления блокируется.
-
JobSchedulerиWorkManager: новые ограничения на частоту запуска foreground services для определённых типов. -
android:exportedобязателен для всех компонентов с intent-filter.
API 35 (Android 15) — добавляет:
- Предиктивная анимация Back gesture —
BackHandlerв Compose илиOnBackPressedCallbackнужно адаптировать. - Health Connect API обновлён.
- Edge-to-edge enforced — приложение обязано корректно рисоваться за системными барами.
Процесс миграции
Первый шаг — поднять targetSdkVersion в gradle и запустить lint: ./gradlew lint. Lint выдаёт предупреждения о deprecated API и несовместимых вызовах. Это не полный список проблем — только статически обнаруживаемые.
Второй шаг — запустить приложение на эмуляторе/устройстве с целевой версией Android и вручную пройти все критичные flow: авторизация, загрузка файлов, уведомления, фоновые задачи, deeplinks. Часть проблем видна только в рантайме.
Разрешения — отдельная проверка: пройтись по всем ActivityCompat.requestPermissions() вызовам и убедиться, что запрашиваются актуальные разрешения. PermissionX или кастомный PermissionManager с маппингом «что нужно → что запрашивать в зависимости от API level» упрощает поддержку нескольких версий.
Foreground services с API 34 требуют указания типа: foreground-service-type в манифесте (camera, location, mediaPlayback, microphone и т.д.). Без типа — сервис не запустится.
Тестирование перед публикацией
Firebase Test Lab — тестирование на реальных устройствах с Android 14 без покупки физических телефонов. Запуск базового Espresso smoke test на 5-10 устройствах разных производителей.
Play Console предоставляет Pre-launch report — автоматическое тестирование APK перед публикацией с краш-отчётами. Не заменяет ручное тестирование, но ловит очевидные проблемы.
Поэтапный роллаут после публикации: 5% → 20% → 50% → 100% с мониторингом ANR и краш-рейта в Play Console и Firebase Crashlytics.
Миграция на один мажорный SDK: 3-5 дней для типичного приложения. Если таргет устарел на 2-3 версии — оценка удваивается. Стоимость рассчитывается индивидуально после аудита приложения.







