Android minSdkVersion 설정 시 주의사항 총정리
✨ 개요
minSdkVersion
은 앱이 설치/실행될 수 있는 최소 Android API 레벨입니다.
너무 낮추면 호환 작업이 폭증하고, 너무 높이면 잠재 사용자 수가 줄어듭니다.
이 글은 실무에서 minSdk를 정할 때 반드시 고려해야 할 체크포인트를 정리합니다.
요약
- 새 프로젝트는 minSdk 21(Lollipop) 이상 권장. (Jetpack/라이브러리 호환, 벡터/멀티덱스/네트워크 이슈 최소화)
- 더 낮게 가야 한다면 호환 유지 비용(멀티덱스, 벡터 드로어블, TLS, 권한 이중 경로 등)을 반드시 예산에 반영.
1. minSdkVersion이 실제로 의미하는 것
- 설치 기준:
minSdk
보다 낮은 기기에는 설치 불가 - 런타임 분기:
Build.VERSION.SDK_INT
로 OS별 코드 분기가 필요 - 리소스 분기:
res/values-vXX
,layout-vXX
처럼 버전별 리소스를 따로 둘 수 있음
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 최신 경로
} else {
// 하위 호환 경로
}
2. 라이브러리/프레임워크의 최소 지원선 확인
많은 최신 라이브러리가 minSdk 21+를 요구합니다.
- Jetpack Compose: 21+ 권장/사실상 필수
- CameraX, WorkManager, Coil, Material3 등: 21+ 중심
- 일부 서드파티 SDK도 21+ 요구가 빠르게 증가
결론: 라이브러리 로드맵이 21+에 맞춰져 있어 아래 지원은 유지 비용이 급격히 증가합니다.
3. 멀티덱스(64K 메서드 한계) – 21 미만만 신경
android {
defaultConfig {
multiDexEnabled true
}
}
dependencies {
implementation "androidx.multidex:multidex:2.0.1"
}
- minSdk < 21이면 멀티덱스 설정이 필요할 수 있습니다. (메서드 수 65,536 초과 시)
- 21+는 플랫폼 멀티덱스를 기본 지원 → 추가 설정 거의 불필요.
4. 벡터 드로어블 호환 – 21 미만만 신경
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
- minSdk < 21이면 벡터 드로어블을 지원 라이브러리 경유로 써야 합니다.
- XML에서 벡터 사용 시 AppCompat를 통해 로드되도록 레이아웃/테마 구성이 필요합니다.
5. 네트워크/TLS & WebView 이슈(특히 19/20)
minSdk가 19(KitKat) 근처면 다음을 고려하세요.
- TLS 1.2/1.3 호환: OkHttp/Conscrypt 조합을 검토 (구형 기기 보안 스택 취약)
- WebView: 21 미만은 시스템 WebView 업데이트 품질/보안이 상대적으로 취약
- HTTP Cleartext 정책은 targetSdk와 연결되지만, 구형 네트워크 스택은 오류 발생 확률↑
대체로 네트워크/웹 보안 요구사항이 있으면 21+를 권장.
6. 권한/알림 등 플랫폼 동작 이중 경로
minSdk가 낮을수록 한 기능을 두 코드 경로로 유지해야 합니다.
- 런타임 권한(23+): pre-23은 설치 시 권한 부여, 23+는 런타임 요청
- 알림 채널(26+): pre-26은 NotificationCompat 경로 필요
- 포그라운드 서비스/백그라운드 제약: 각 OS별 분기 증가
실제로는 targetSdk에 따라 정책이 바뀌지만, 낮은 minSdk는 구버전 경로 유지가 필수라 복잡도가 상승.
7. 리소스/레이아웃 분기 전략
res/layout/activity_main.xml
res/layout-v21/activity_main.xml // 21+ 전용(상태바/트랜지션 등)
res/values/styles.xml
res/values-v23/styles.xml // 23+ 전용 테마 속성
- 버전에 따라 레이아웃/스타일을 분기하면 유지가 쉬워집니다.
- 공통 로직은 최대한 코드에서 조건부 처리
- 고사양 UI 효과(Transition, Ripple, Elevation)는 v21 리소스로 격리
8. 결론
- 새 프로젝트는 minSdk 21+로 시작하세요. 유지보수/보안/성능/라이브러리 호환에서 이점이 큽니다.
- 21 미만을 반드시 지원해야 한다면, 본문 체크리스트에 따라 멀티덱스/벡터/디서가링/네트워크/권한 이중 경로를 체계적으로 준비하세요.