Выбор и проверка min/target/compile SDK в Android‑проекте

Коротко: выбирайте minSdk на основе статистики пользователей, держите compileSdk и targetSdk равными последней стабильной версии, а итоговые значения проверяйте в app/build.gradle и в Merged Manifest — менять вручную не нужно.

Что означают API level, min/target/compile SDK и uses‑sdk

  • API level — числовой идентификатор версии платформы (например, Android 14 → API 34).
  • minSdkVersion — минимальная версия Android, на которой приложение будет устанавливаться.
  • targetSdkVersion — версия, под поведение которой вы адаптировали приложение; влияет на системные изменения в поведении.
  • compileSdkVersion — версия SDK, с которой вы компилируете код; определяет, какие API доступны при сборке.
  • uses‑sdk — финальный тег в манифесте, который получается в результате слияния настроек Gradle и библиотек.

Если вы используете Gradle, задавайте min/target/compile в build.gradle / build.gradle.kts — не правьте вручную.

Как проверить значения в проекте (пошагово)

  1. Проверка в исходниках (Gradle)
    • Groovy (app/build.gradle):
     android {
       compileSdkVersion 34
       defaultConfig {
         minSdkVersion 24
         targetSdkVersion 34
       }
     }
     ```
   - Kotlin DSL (build.gradle.kts):
     
```kotlin
     android {
       compileSdk = 34
       defaultConfig {
         minSdk = 24
         targetSdk = 34
       }
     }
     ```
   Убедитесь, что значения заданы в defaultConfig или в нужных flavor'ах — разные flavor'ы могут иметь разные min/target.

2. Проверка итогового манифеста
   - В Android Studio: откройте модуль → Manifests → вкладка "Merged Manifest". Там увидите итоговый <uses‑sdk> и источник (какой модуль/библиотека его задала).

Если в Merged Manifest значения отличаются от Gradle — где‑то есть конфликт (манифест библиотеки или старые ручные правки). Разрешите его в Gradle или удалите ручной .

  1. Проверка в собранном APK/AAB
    • Используйте APK Analyzer в Android Studio или распакуйте APK и декомпилируйте AndroidManifest.xml через aapt/apktool. Посмотрите <uses‑sdk> в итоговом манифесте.

Как выбрать оптимальные значения: практическая стратегия

  1. Анализ аудитории
    • Соберите данные из аналитики (Firebase, собственные логи) — какая доля устройств на старых API.
  2. Определите minSdkVersion
    • Отбросьте платформы с малой долей пользователей, если поддержка их слишком дорогая. Часто коммерческие проекты выбирают minSdk в диапазоне 21–26; для B2B можно поднять до 29+.
  3. Поднимайте compileSdk/target постепенно
    • Рекомендация: compileSdk = latest stable; targetSdk = latest stable после тестов. Поднятие target может изменить поведение (разрешения, фоновые задачи и пр.) — делайте это как отдельную задачу с прогоном тестов.
  4. Учтите зависимости
    • Некоторые библиотеки требуют минимального compileSdk или minSdk. Обновите библиотеки или оцените стоимость повышения minSdk.

Хорошая практика: держать compileSdk и targetSdk равными последней стабильной версии, minSdk устанавливать по аналитике и бизнес‑приоритетам.

Типовые конфигурации (ориентиры)

  • Баланс охвата/современности (многие проекты): compileSdk = 34, minSdk = 24, targetSdk = 34.
  • Максимальный охват: compileSdk = 34, minSdk = 21, targetSdk = 34 — потребует больше условных ветвлений.
  • Корпоративный парк: compileSdk = 34, minSdk = 29, targetSdk = 34 — упрощает поддержку.

Частые ошибки

  • Несоответствие Gradle и итогового манифеста (ручной или библиотека конфликтует).
  • Поднятие targetSdk без анализа изменений поведения платформы — приводит к падениям и багам.
  • Удерживание слишком низкого minSdk ради небольшой доли пользователей — увеличивает техдолг.
  • Долгое откладывание обновления compileSdk — в будущем приведёт к несовместимостям с новыми библиотеками.

FAQ

  • Нужно ли вручную редактировать <uses‑sdk> в AndroidManifest.xml?
    Нет. Значения должны управляться через Gradle; финальный <uses‑sdk> формируется на этапе сборки.

  • Что безопаснее менять сначала: compileSdk или targetSdk?
    Сначала обновите compileSdk (компиляция), затем корректно поднимайте targetSdk и прогоняйте тесты на ключевых версиях Android.

  • Как быстро найти, какая библиотека указывает свои min/target?
    Откройте Merged Manifest — там в отношении <uses‑sdk> будет указан источник (module/library).

Если хотите, пришлите фрагмент вашего build.gradle (Groovy или KTS) — помогу проверить и предложить оптимальную конфигурацию.