[안드로이드] minSdkVersion, targetSdkVersion 이란 무엇인가

프로그래밍/Android 관련2017. 12. 23. 15:15

안녕하세요. 개발자 드리머즈입니다.


안드로이드 스튜디오에서 build.gradle (Module:app)을 보면 아래와 같이

minSdkVersion과 targetSdkVersion이 있습니다.


minSdkVersion 15
targetSdkVersion 26


이 값은 apk가 빌드되는 과정에서 AndroidManifest.xml에 <uses-sdk> attribute로 포함됩니다.

<uses-sdk android:minSdkVersion="integer"
         
android:targetSdkVersion="integer"
         
android:maxSdkVersion="integer" />


이 값들이 의미하는 것이 무엇일까요?

minSdkVersion인 쉽게 추측가능 하듯이 apk가 설치될 수 있는 최소 API레벨(OS버전)을 의미합니다.

공식홈의 설명은 아래와 같습니다.


*minSdkVersion

애플리케이션이 실행하는 데 필요한 최소 API 레벨을 지정하는 정수입니다. Android 시스템은 시스템의 API 레벨이 이 특성에 지정된 값보다 낮은 경우 사용자가 애플리케이션을 설치하는 것을 방지합니다. 항상 이 특성을 선언해야 합니다. 


targetSdkVersion은 무엇일까요? 먼저 공식홈의 설명부터 보겠습니다.


*targetSdkVersion

애플리케이션의 대상 API 레벨을 지정하는 정수입니다. 설정하지 않을 경우 기본값은 minSdkVersion에 주어진 값과 동일합니다.

이 특성은 개발자가 대상 버전을 테스트했고 시스템이 향후 앱의 대상 버전과의 호환성을 유지하도록 호환성 동작을 활성화해서는 안 됨을 시스템에 알립니다. 여전히 애플리케이션을 이전 버전(minSdkVersion까지)에서 실행할 수 있습니다.

Android는 각 새 버전과 함께 진화하므로 몇몇 동작과 심지어 모양이 변경될 수 있습니다. 그러나 플랫폼의 API 레벨이 앱의 targetSdkVersion이 선언한 버전보다 높은 경우 시스템은 앱이 예상대로 계속 작동하도록 호환성 동작을 활성화할 수 있습니다. 실행 중인 플랫폼의 API 레벨과 일치하는 targetSdkVersion을 지정하여 그러한 호환성 동작을 비활성화할 수 있습니다. 예를 들어, 해당 값을 "11" 이상으로 설정하면 Android 3.0 이상에서 실행 중일 때 시스템이 새 기본 테마(Holo)를 앱에 적용할 수 있으며 대형 화면에서 실행 중일 때 (API 레벨 11에 대한 지원이 대형 화면을 암시적으로 지원하므로) 화면 호환성 모드를 비활성화합니다.

이 특성에 대해 설정한 값에 기반하여 시스템이 활성화할 수 있는 호환성 동작이 많이 있습니다. Build.VERSION_CODES 참조에서 해당 플랫폼 버전별로 이러한 몇몇 동작에 대해 설명합니다.

애플리케이션을 각 Android 릴리스와 함께 유지 관리하려면 최신 API 레벨과 일치하도록 이 특성 값을 높인 후에 해당 플랫폼 버전에서 애플리케이션을 철저히 테스트해야 합니다.

도입: API 레벨 4 


설명이 길게 되어있는데.. 한글 번역이 문제인지.. 잘 이해가 안되네요.

영어 원문은 아래와 같습니다.


An integer designating the API Level that the application targets. If not set, the default value equals that given to minSdkVersion.

This attribute informs the system that you have tested against the target version and the system should not enable any compatibility behaviors to maintain your app's forward-compatibility with the target version. The application is still able to run on older versions (down to minSdkVersion).

As Android evolves with each new version, some behaviors and even appearances might change. However, if the API level of the platform is higher than the version declared by your app's targetSdkVersion, the system may enable compatibility behaviors to ensure that your app continues to work the way you expect. You can disable such compatibility behaviors by specifying targetSdkVersion to match the API level of the platform on which it's running. For example, setting this value to "11" or higher allows the system to apply a new default theme (Holo) to your app when running on Android 3.0 or higher and also disables screen compatibility mode when running on larger screens (because support for API level 11 implicitly supports larger screens).

There are many compatibility behaviors that the system may enable based on the value you set for this attribute. Several of these behaviors are described by the corresponding platform versions in the Build.VERSION_CODES reference.

To maintain your application along with each Android release, you should increase the value of this attribute to match the latest API level, then thoroughly test your application on the corresponding platform version.

Introduced in: API Level 4 


영어로 되어있어서 읽는데 시간이 좀 걸리지만, 이해는 더 잘 되네요.


제가 이해한 내용은 아래와 같습니다.

Android OS가 진화함에 따라(=OS 버전 상승 = API level 상승) 특정 api를 실행했을 때 행동이나 관련된 외형이 변하기도 합니다.

예를 들면 제가 만드는 app이 Android OS 버전 4.0에서 개발되고 테스트 됐을 지라도, 이 app을 Android OS 버전 7.0에서 실행시키면 app이 동작이 약간 다를 수 있습니다. 왜냐하면 어느 안드로이드 버전에서 실행시키느냐에 따라.. 동일한 api를 호출해도 동작이나 외형이 다를 수 있기 때문입니다. 그렇기에 targetSdkVersion에 Android OS 버전 4.0에 해당하는 API level인 14로 지정하면, Android OS 버전 7.0인 디바이스에서 그 app을 실행시켜도 Android OS 버전 4.0과 동일하게 동작합니다. (= compatibility mode enable = 호환성 모드 활성화)

만약 호환성 모드를 원치 않고, Android OS 버전 7.0의 행동이나 외형을 사용하고 싶으면 targetSdkVersion에 Android OS 버전 7.0에 해당하는 API level인 24를 입력하면 됩니다.


중요하게 볼 점은.. 이 targetSdkVersion 값은 고정할 게 아니라, Android OS의 새 버전이 나옴에 따라 상승시키고 철저하게 테스트할 것을 권장하는 것 같습니다.




*참고

공식홈 <uses-sdk> attritube 설명 : https://developer.android.com/guide/topics/manifest/uses-sdk-element.html

wikipedia backward compatibility : https://en.wikipedia.org/wiki/Backward_compatibility

wikipedia forward compatibility : https://en.wikipedia.org/wiki/Forward_compatibility



작성자

Posted by 드리머즈

관련 글

댓글 영역