[안드로이드] minSdkVersion, targetSdkVersion 이란 무엇인가
안녕하세요. 개발자 드리머즈입니다.
안드로이드 스튜디오에서 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 레벨을 지정하는 정수입니다. 설정하지 않을 경우 기본값은 이 특성은 개발자가 대상 버전을 테스트했고 시스템이 향후 앱의 대상 버전과의 호환성을 유지하도록 호환성 동작을 활성화해서는 안 됨을 시스템에 알립니다. 여전히 애플리케이션을 이전 버전( Android는 각 새 버전과 함께 진화하므로 몇몇 동작과 심지어 모양이 변경될 수 있습니다. 그러나 플랫폼의 API 레벨이 앱의 이 특성에 대해 설정한 값에 기반하여 시스템이 활성화할 수 있는 호환성 동작이 많이 있습니다. 애플리케이션을 각 Android 릴리스와 함께 유지 관리하려면 최신 API 레벨과 일치하도록 이 특성 값을 높인 후에 해당 플랫폼 버전에서 애플리케이션을 철저히 테스트해야 합니다. 도입: API 레벨 4 |
설명이 길게 되어있는데.. 한글 번역이 문제인지.. 잘 이해가 안되네요.
영어 원문은 아래와 같습니다.
An integer designating the API Level that the application targets. If not set, the default value equals that given to 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 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 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 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
댓글 영역