Выбор и проверка 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 — не правьте
Как проверить значения в проекте (пошагово)
- Проверка в исходниках (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 или удалите ручной
- Проверка в собранном APK/AAB
- Используйте APK Analyzer в Android Studio или распакуйте APK и декомпилируйте AndroidManifest.xml через aapt/apktool. Посмотрите <uses‑sdk> в итоговом манифесте.
Как выбрать оптимальные значения: практическая стратегия
- Анализ аудитории
- Соберите данные из аналитики (Firebase, собственные логи) — какая доля устройств на старых API.
- Определите minSdkVersion
- Отбросьте платформы с малой долей пользователей, если поддержка их слишком дорогая. Часто коммерческие проекты выбирают minSdk в диапазоне 21–26; для B2B можно поднять до 29+.
- Поднимайте compileSdk/target постепенно
- Рекомендация: compileSdk = latest stable; targetSdk = latest stable после тестов. Поднятие target может изменить поведение (разрешения, фоновые задачи и пр.) — делайте это как отдельную задачу с прогоном тестов.
- Учтите зависимости
- Некоторые библиотеки требуют минимального 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) — помогу проверить и предложить оптимальную конфигурацию.