CompileSdk, TargetSdk, MinSdk의 관계에 대한 간략한 기록
compileSdk 31
defaultConfig {
minSdk 21
targetSdk 30
(app gradle에서 확인할 수 있는 sdk 버전 정보들)
1. compileSdkVersion
단어 그대로 컴파일시에 사용하는 sdk버전이다.
예를들어 어떤 라이브러리를 새롭게 프로젝트에 추가했는데, 해당 라이브러리가 sdk 26 이상을 베이스로 짜여진 라이브러리라면, compileSdkVersion 버전이 25이하라면 해당 라이브러리를 등록시 컴파일 에러가 나타난다.
즉 compileSdkVersion는 최소한 사용하는 라이브러리들의 베이스 SDK 이상으로 설정해야한다.
컴파일시에만 관여하므로 실제 런타임에는 관여하지 않기 때문에 가능하다면 항상 최신버전의 sdk를 유지하는것이 좋다.
(실제 배포시에는 compileSdkVersion 때문에 사이드 이펙트가 발생할 가능성이 없다)
2. targetSdkVersion
해당 프로젝트가 targetSdkVersion에 맞게 최적화 된다.
실제 컴파일시에 사용되는 sdk가 아니라 런타임시에 동작하는 버전을 의미한다.
개발시에는 targetSdkVersion에 맞게 개발을 해야하며 이는 곧 해당하는 버전까지는 테스트가 된다는것을 의미한다.
예를들어 targetSdk를 30으로 설정해놓고 개발을 하였는데, 신규 사용자의 sdk가 31이라면 정상동작을 확신할 수 없다.
반대로 targetSdk를 30으로 설정했는데 사용자의 sdk가 26이라면, 앱은 기기의 sdk26버전에 맞추어 동작한다.
흔히 개발시에 sdk 버전별로 분기처리를 하는것이 이때문이다.
최신 sdk에서 추가된 기능은 오래된 기기에서 정상동작하지 않을 가능성이 높으므로 오래된 기기에도 대응을 해주는 것이다.
때문에 targetSdk 버전을 바꿀때에는 신중해야하며 compileSdkVersion과 달리 항상 최신버전을 유지할 필요는 없다.
보통 최신 API가 나오면, compileSdkVersion을 먼저 올려서 최신 API에 대응을 한 뒤, targetSdkVersion을 그에 맞춰 올려준다.
3.minSdkVersion
앱이 구동될 수 있는 최소 sdk버전.
여기서 설정한 값보다 낮은 버전을 가진 기기에서는 해당 앱을 실행할 수 없다.
특히 이 minSdkVersion을 낮게 설정할수록, 최신 api를 사용할 때 마다 더욱 더 많은 버전에 대응을 해야하므로 분기가 늘어나 관리해야할 코드가 늘어난다.
'Android > Tips' 카테고리의 다른 글
Android 12 이상 SplashScreen 대응하기 (올바른 SplashScreen 구현하기) (0) | 2022.05.10 |
---|---|
startActivityForResult Deprecated (0) | 2022.02.18 |
툴바(ToolBar) 구현, Toolbar VS Layout (0) | 2021.12.13 |
RecyclerView에 animation 효과 주기 (0) | 2021.12.04 |
Recyclerview adapter 재활용하기 (0) | 2021.11.15 |