안드로이드 앱이 "나는 이 버전까지 맞춰 검증했다" 고 선언하는 값이다. 헷갈리기 쉬운 세 값 중 하나다.
| 값 | 뜻 |
|---|---|
minSdk | 이 버전 미만에는 설치 안 됨 |
targetSdk | 동작 변경이 여기까지 적용된다 |
compileSdk | 컴파일에 쓰는 SDK — 실행 동작과 무관 |
핵심 — 하위 호환의 스위치다
안드로이드가 새 제약을 넣을 때, 기존 앱을 한꺼번에 깨뜨리지 않는다. 대신 targetSdk 를 기준으로 나눈다.
targetSdk 30 인 앱을 Android 15 에서 실행
→ Android 12 이후의 새 제약 상당수가 적용되지 않는다 (구버전 동작 유지)
targetSdk 35 로 올리면
→ 그 사이의 모든 동작 변경이 한꺼번에 적용된다
그래서 올릴 때 깨진다. 낮게 두고 미루면 나중에 여러 버전의 변경이 동시에 몰려온다 — 포그라운드 서비스 타입, BLE 권한, 백그라운드 제약이 한 번에.
미룰 수도 없다
구글 플레이가 최신 버전 대비 일정 기간 안의 targetSdk 를 요구한다. 기한이 지나면 신규 등록도 업데이트도 막힌다. 개인 프로젝트라 배포를 안 하더라도, 동작 검증은 실제 배포될 값 기준으로 해야 의미가 있다.
이 프로젝트에 걸리는 것들
targetSdk 를 올리면서 반드시 확인해야 하는 것이 셋이다.
Android 12 BLE 가 런타임 권한으로 분리 — BLUETOOTH_SCAN / CONNECT
Android 14 포그라운드 서비스 타입 미선언 시 크래시
Android 15 백그라운드에서 포그라운드 서비스 시작 차단
셋 다 컴파일은 통과하고 런타임에 터진다. 권한 거부 경로와 백그라운드 복귀 경로를 실제로 밟아 봐야 발견된다 — 정상 흐름만 눌러 보면 안 나온다.