SdkVersion 관계

2021. 4. 23. 18:20Android/Gradle

반응형

compileSdkVersion

  • Gradle에 어떤 안드로이드 SDK 버전으로 앱을 컴파일 할 것인지 알려줍니다 . 즉, 지원할 수 있는 가장 높은 API 버전을 의미합니다.
    해당 SDK 버전에 포함된 API를 사용할 수 있다는 것을 의미합니다.
  • 컴파일시에만 적용되므로 런타임동안에는 영향을 미치지 않습니다.
  • 항상 최신 버전의 SDK로 지정하는 것이 좋습니다.
  • import문으로참조되는 클래스나 메소드를 찾을 때 어떤 버전의 SDK에서 찾을 것인가를 결정해줍니다.

 

minSdkVersion

  • minSdkVersion보다 낮은 API 버전 앱은 설치할 수 없습니다.
  • minSdkVersion보다 높은 API를 사용하면 lint에서 경고를 띄워 알려줍니다.
  • Support Library나 Google Play Service는 자체 minSdkVersion을 가지므로 이 중 가장 높은 버전으로 맞춰야 합니다.

 

targetSdkVersion 

  • minSdkVersion 이상에서 지원하는 어떤 기능을 사용하고자 위함입니다.
  • 실제 컴파일에는 관여하지 않음. 빌드시 버전을 낮추어도 원하는 클래스의 메소드를 컴파일 할 수 있습니다.
  • 지정한 버전까지 앱을 테스트 했음을 의미합니다. 기기가 Nougat(API 24)더라도 target이 Marshmellow(API 23)이라면 Marshmellow 단말기까지는 정상동작 됨을 의미하며 Nougat기기는 정상적으로 돌아갈지 확신할 수 없습니다. 상위호환되는 API로 개발을 했다면 아마 잘 돌아갈 것 입니다. 
  • 즉 targetSdkVersion이 달라야 앱의 행동 로직이 달라지므로, 안드로이드가 상위호환성을 제공할 수 있습니다.
  • Marshmellow(API 23)에서 도입된 런타임 퍼미션(runtime permission model)은 targetSdkVersion 을 API 23으로 지정해야 적용됩니다.
  • compileSdkVersion을 25로하고 targetSdkVersion을 21로하면 Marshmellow 이상 단말기에서 런타임 퍼미션이 Marshmellow 이전처럼 강제 허용되어 있습니다. 허용을 해제하려고하면 이전 버전으로 빌드된 앱이라고 메시지가 출력됩니다.
  • targetSdkVersion이 22이라면 22이후 버전에서 지원되는 기능이 제외된 앱이 만들어지므로 런타임 퍼미션을 사용 못하는 것입니다.



세 종류의 SDK 버전의 관계

minSdkVersion <= targetSdkVersion <= compileSdkVersion

 

안정적인 앱을 원한다면

minSdkVersion <= targetSdkVersion == compileSdkVersion

 

출처: https://duzi077.tistory.com/141 [개발하는 두더지]

반응형