Android/Tips

CompileSdk, TargetSdk, MinSdkVersion 비교

Seoplee 2021. 12. 16. 23:01

CompileSdk, TargetSdk, MinSdk의 관계에 대한 간략한 기록

compileSdk 31

defaultConfig {
    minSdk 21
    targetSdk 30

(app gradle에서 확인할 수 있는 sdk 버전 정보들)

 

1. compileSdkVersion

 

단어 그대로 컴파일시에 사용하는 sdk버전이다.

예를들어 어떤 라이브러리를 새롭게 프로젝트에 추가했는데, 해당 라이브러리가 sdk 26 이상을 베이스로 짜여진 라이브러리라면, compileSdkVersion 버전이 25이하라면 해당 라이브러리를 등록시 컴파일 에러가 나타난다.

즉 compileSdkVersion는 최소한 사용하는 라이브러리들의 베이스 SDK 이상으로 설정해야한다.

컴파일시에만 관여하므로 실제 런타임에는 관여하지 않기 때문에 가능하다면 항상 최신버전의 sdk를 유지하는것이 좋다.

(실제 배포시에는 compileSdkVersion 때문에 사이드 이펙트가 발생할 가능성이 없다)

 

컴파일 sdk 버전이 낮다면 위와같이 최신 라이브러리를 사용할 때 문제가 발생한다. (이미지 출처 https://toepic.fail/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4-%EC%84%9C%ED%8F%AC%ED%8B%B0%EB%93%9C-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EB%B2%84%EC%A0%84-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0-2290a688b775)

2. targetSdkVersion

 

해당 프로젝트가 targetSdkVersion에 맞게 최적화 된다.

실제 컴파일시에 사용되는 sdk가 아니라 런타임시에 동작하는 버전을 의미한다.

개발시에는 targetSdkVersion에 맞게 개발을 해야하며 이는 곧 해당하는 버전까지는 테스트가 된다는것을 의미한다.

예를들어 targetSdk를 30으로 설정해놓고 개발을 하였는데, 신규 사용자의 sdk가 31이라면 정상동작을 확신할 수 없다.

반대로 targetSdk를 30으로 설정했는데 사용자의 sdk가 26이라면, 앱은 기기의 sdk26버전에 맞추어 동작한다.

흔히 개발시에 sdk 버전별로 분기처리를 하는것이 이때문이다.

최신 sdk에서 추가된 기능은 오래된 기기에서 정상동작하지 않을 가능성이 높으므로 오래된 기기에도 대응을 해주는 것이다.

때문에 targetSdk 버전을 바꿀때에는 신중해야하며 compileSdkVersion과 달리 항상 최신버전을 유지할 필요는 없다.

보통 최신 API가 나오면, compileSdkVersion을 먼저 올려서 최신 API에 대응을 한 뒤, targetSdkVersion을 그에 맞춰 올려준다.

 

sdk 버전에 따라 다른 대응을 보여줘야 한다.

3.minSdkVersion

 

앱이 구동될 수 있는 최소 sdk버전.

여기서 설정한 값보다 낮은 버전을 가진 기기에서는 해당 앱을 실행할 수 없다.

특히 이 minSdkVersion을 낮게 설정할수록, 최신 api를 사용할 때 마다 더욱 더 많은 버전에 대응을 해야하므로 분기가 늘어나 관리해야할 코드가 늘어난다.

 

보다 많은 사용자 확보를 위해 적절한 minSdk 설정이 중요하다.