Какую минимальную версию Android используешь в проектах

Ответ

Обычно выбираю minSdkVersion 21 (Android 5.0 Lollipop).

Почему?

  • Поддержка Material Design
  • 99%+ устройств на рынке (по данным Google Dashboard)
  • Достаточно новых API (JobScheduler, RecyclerView, View elevation)

Если проект не требует новейших фич, иногда опускаю до API 19 (KitKat) для покрытия старых устройств.

Пример в build.gradle:

android {
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 34
    }
}

Для мультимодульных проектов можно вынести в buildConfig:

const val MIN_SDK = 21

Ответ 18+ 🔞

А, вот это вопрос, который каждый раз заставляет задуматься, как будто выбираешь, на какой тачке ехать — на новой, но с кондиционером, или на старой, но зато бесплатной. Так вот, слушай.

В девяноста девяти случаях из ста я тыкаю пальцем в minSdkVersion 21 (Android 5.0 Lollipop). Почему, спрашиваешь? Ну, ёпта, давай разберём.

Во-первых, с этого уровня начинается нормальный, человеческий Material Design. Не то чтобы до этого всё было говно, но там уже можно делать интерфейсы, которые не выглядят так, будто их рисовал программист в 2002-м году левой ногой. Тени, анимации, этот ваш RecyclerView вместо этих древних адаптеров, которые только и умели, что ListView — всё это уже есть. Жить можно.

Во-вторых, статистика, мать её. По официальным цифрам от гугла, на эти версии и выше сейчас сидит офигенное большинство устройств. Говорят, что-то около 99% и больше. Оставшийся один процент — это, скорее всего, какие-нибудь терминалы для оплаты в глухой деревне или бабушкин планшет, который уже десять лет пылится. Ну или китайские поделки, которые нихуя не обновляются. Доверия ебать ноль к тому, что на них вообще что-то запустится.

В-третьих, API уже достаточно взрослые. Тот же JobScheduler для фоновых задач, чтобы не изобретать велосипед, нормальная работа с уведомлениями. В общем, не каменный век.

Короче, золотая середина. Не самый древний хлам, но и не заставляешь пользователей бежать за новым телефоном.

А когда опускаюсь до API 19 (KitKat)? Да только в одном случае: если заказчик — контора, которая до сих пор раздаёт своим курьерам или мерчандайзерам допотопные планшеты с экранами, как будто их топором вырубали. Или если пишешь приложение для какой-нибудь специфичной промышленной железяки, которая обновляется раз в десять лет. Тогда да, приходится вспоминать, как это — работать без половины удобных штук. Волнение ебать начинается сразу, как только открываешь документацию к API 19.

Вот, смотри, как это обычно в build.gradle выглядит, ничего сложного:

android {
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 34 // На текущий момент актуальная
    }
}

А если проект разросся до мультимодульного монстра, где в каждом модуле нужно эту цифру прописывать, то лучше вынести её в отдельный конфиг, чтобы не бегать и не менять везде. Удобно, чёрт возьми.

// В build.gradle уровня проекта
object BuildConfig {
    const val MIN_SDK = 21
}

// А в модуле используешь
android {
    defaultConfig {
        minSdkVersion BuildConfig.MIN_SDK
    }
}

Вот и вся магия. Выбрал раз и забыл. Главное — не увлекаться и не ставить minSdkVersion в 33, потому что «о, какая новая фича классная». Иначе твоё приложение будет только для тебя и двух других гиков. А так — живём, не тужим.