Как подготовить приложение к 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

  1. Подготовка инфраструктуры
    • Обновите Android Studio до версии, поддерживающей Android 15 SDK.
    • Обновите Android Gradle Plugin (AGP) и Gradle wrapper до версий, совместимых с AGP.
    • Обновите Kotlin, AndroidX (core‑ktx, appcompat, activity, fragment, lifecycle и т.д.), Google Play/Firebase и тестовые библиотеки.

Создайте отдельную ветку в VCS для миграции — это позволит безопасно тестировать и откатывать изменения.

  1. Обновите compileSdk → 35
    • В module build.gradle.kts:
android {
    compileSdk = 35
}
  • Исправьте все ошибки компиляции (изменённые сигнатуры, новые обязательные параметры). Пока не повышайте targetSdk — сначала исправьте сборку.
  1. Повышение 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‑логику для старых версий.
  1. Тестирование

    • Используйте internal/closed тестовые треки в Play Console.
    • Привлеките тестировщиков с реальными устройствами и эмуляторами Android 15.
    • Прогоните сценарии: первая установка, обновление с предыдущих версий, длительная работа в фоне, покупочные/платёжные сценарии.
  2. Поддержка старых версий

    • В местах использования новых 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) с пометками, какие зависимости обновлять в первую очередь.