Как подготовить приложение к Android 15 быстро и безопасно
Android 15 — это API level 35. Чтобы подготовить приложение: обновите compileSdk до 35, затем поэтапно подтяните targetSdk до 35, обновите AGP/Gradle/зависимости, прогоните behavior‑changes и тесты на устройствах с Android 15.
Что такое API level Android 15 и почему это важно
API level — числовая метка платформы. Android 15 (API 35) вводит новые API, ограничения безопасности и изменения поведения, которые включаются при таргете на этот уровень. compileSdk = 35 даёт доступ к новым классам и сигнатурам, but поведение приложения на старых устройствах определяется targetSdk и runtime. Google Play со временем перестаёт принимать обновления приложений, таргетящих слишком старые API, поэтому обновление — не опция, а необходимость.
Планируйте миграцию на Android 15 ещё на стадии бета/RC: это даст время отловить поведенческие изменения и обновить зависимости.
На что обратить внимание: ключевые зоны совместимости
- Разрешения и приватность: новые runtime‑правила, ограниченный доступ к фоновым данным и сенсорам. Проверьте все запросы разрешений и сценарии отказа.
- Фоновые процессы: дополнительные лимиты на сервисы и запуск активностей из фона; пересмотрите ForegroundService, WorkManager и JobScheduler.
- Storage и медиаконтент: дополнительные ограничения scoped storage, изменения в SAF и доступе к медиатеке.
- Уведомления: если ещё не реализовано, добавьте запрос разрешения на показ уведомлений и обновите каналы/приоритеты.
- Скрытые API: рефлексия и обращения к non‑SDK интерфейсам будут всё чаще приводить к падениям — заменяйте на официальные API.
Главная ошибка — оставлять targetSdk на старом уровне «чтобы ничего не ломалось». Это лишь откладывает проблемы и усложняет миграцию.
Пошаговая инструкция по обновлению compileSdk и targetSdk
- Подготовка инфраструктуры
- Обновите Android Studio до версии, поддерживающей Android 15 SDK.
- Обновите Android Gradle Plugin (AGP) и Gradle wrapper до версий, совместимых с AGP.
- Обновите Kotlin, AndroidX (core‑ktx, appcompat, activity, fragment, lifecycle и т.д.), Google Play/Firebase и тестовые библиотеки.
Создайте отдельную ветку в VCS для миграции — это позволит безопасно тестировать и откатывать изменения.
- Обновите compileSdk → 35
- В module build.gradle.kts:
android {
compileSdk = 35
}
- Исправьте все ошибки компиляции (изменённые сигнатуры, новые обязательные параметры). Пока не повышайте targetSdk — сначала исправьте сборку.
- Повышение targetSdk → 35 и проработка behavior changes
- В defaultConfig:
defaultConfig {
targetSdk = 35
}
- Пройдитесь по official behavior changes: составьте чек‑лист (разрешения, фоновые задачи, storage, уведомления, WebView).
- Внедрите runtime‑проверки:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { /* API 35 */ }
- Обновите обработку новых runtime‑разрешений и fallback‑логику для старых версий.
-
Тестирование
- Используйте internal/closed тестовые треки в Play Console.
- Привлеките тестировщиков с реальными устройствами и эмуляторами Android 15.
- Прогоните сценарии: первая установка, обновление с предыдущих версий, длительная работа в фоне, покупочные/платёжные сценарии.
-
Поддержка старых версий
- В местах использования новых API всегда делайте проверки Build.VERSION.SDK_INT и предоставляйте безопасный fallback.
- Не просите новые разрешения на старых версиях, где их нет.
Пример минимального набора обновлений в build.gradle.kts:
plugins { id("com.android.application") version "X.Y.Z" }
android {
compileSdk = 35
defaultConfig {
applicationId = "com.example.app"
minSdk = 21
targetSdk = 35
versionCode = 123
versionName = "1.2.3"
}
// other config
}
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")
// update other libs
}
Частые ошибки
- Откладывать повышение targetSdk, надеясь "ничего не сломается".
- Обновлять targetSdk без обновления AGP/Gradle и библиотек — получаете компиляционные и рантайм‑ошибки.
- Пропускать тесты сценариев обновления (особенно миграции данных и разрешений).
- Использовать скрытые API вместо официальных замен.
FAQ
-
Нужно ли сначала менять compileSdk или targetSdk?
- Сначала compileSdk → 35, почините сборку и устраните deprecations, затем повышайте targetSdk и работайте с behavior changes.
-
Как убедиться, что пользователи на старых Android не пострадают?
- Покрывайте новые API проверками версии и fallback‑реализациями, тестируйте на устройствах с minSdk…targetSdk‑1.
-
Что делать с библиотеками, которые не поддерживают API 35?
- Обновите их до актуальных версий; если обновление невозможно — замените или форкните библиотеку, либо отложите повышение target до решения проблемы.
Если хотите, могу приложить подробный build.gradle.kts для конкретной стек‑комбинации (Kotlin + Jetpack + Firebase) с пометками, какие зависимости обновлять в первую очередь.