본문 바로가기

개발이야기/Android

android targetsdkversion & minsdkversion


targetSdkVersion? minSdkVersion? maxSdkVersion?

안드로이드에서 애플리케이션을 개발할 때 가장 기본적으로 설정해야 하는 manifest의 설정 인 uses-sdk에 대해 적어보고자 한다. 각각의 요소들의 값이 어떤 역할을 하는지 모르고 무작정 올리거나 내리는 경우가 많다.

각 요소의 값에 따라 구동이 되는 단말의 개수가 현저하게 달라지므로, 이 요소들에 대해 자세히 알아보자.


구문

1
2
3
<uses-sdk android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer" />
cs


포함된 위치 : <manifest>


android:minSdkVersion

애플리케이션이 필요한 최소 API레벨을 지정하는 정수. Android 시스템이 시스템의 api레벨이 이 특성에 지정된 값보다 더 낮은 경우 사용자가 애플리케이션을 설치하는 것을 방지한다.(필수값)

Example)

 구분

애플리케이션 minSdkVerison 

시스템 api version
(사용자 단말 android 버젼)

 비고

 1

 21

20

설치불가

 2

21

21

설치가능

정상작동

 3

21

 22

 설치가능

정상작동

 4

적지않음(기본값 1)

1 : 모든기기와 호환됨

20

설치가능

api level이 21인 기능을 사용할 때
런타임 오류


상기와 같이 적절하지 않은 값을 넣었을 때 심각한 런타임 에러를 발생시키기 때문에 적절한 API레벨을 선언해야 한다.


android:targetSdkVersion

애플리케이션의 대상 API레벨을 지정하는 정수, 설정하지 않을 경우 기본값은 minSdkVersion과 주어진값과 동일. 이 특성은 개발자가 대상버전을 테스트했음을 보장한다. targetSdkVersion보다 높은 시스템에서는 호환성 동작을 막게 할 수 있다.

Example)

 구분

 애플리케이션 targetSdkVersion

 시스템 api version
(사용자 단말 android 버젼)

 비고

 1

 11

 11

설치가능, 정상작동

api level 11에 맞는 api 작동 

 2

 11

 12

설치가능, 정상작동

12에서 지원하는 api 작동X, 

11에서 작동하는 하위호환 api 작동O 


Example2)

  • API 9까지는 메인 스레드에서도 네트워크 통신을 할 수 있다. API 10 이상부터는 메인 스레드에서 네트워크 통신을 시도하면, 앱이 종료된다. 하지만, TargetSdkVersion을 9로 적으면 앱이 종료되지 않는다. 
  • 안드로이드의 기본 테마가 API 11부터 홀로(Holo) 테마로 바뀌었다. TargetSdkVersion을 10으로 설정하면, 11이상의 단말에서 앱이 실행되더라도 11의 기본 테마인 홀로(Holo)가 적용되지 않는다. 홀로가 아닌 하위호환 테마가 적용된다.

android:maxSdkVersion

애플리케이션이 실행되도록 고안된 최대 API레벨을 지정하는 정수이다.
그러나 상기 특성을 선언되는것은 아래와 같은 사항 때문에 권장되지 않는다.(Android maxSdkVersion 설명 Doc)
  • maxSdkVersion을 선언하지 않더라도 최신의 API플랫폼 버젼은 완벽하게 하위호환된다.
    (새로운 버젼이 나오더라도 완벽하게 아래 버젼과 호환되기 때문에 걱정할 필요가 없다는 말, 안드로이드의 하위호완 부심 ㅎㄷㄷ)
  • 사용자가 상위 API레벨로 시스템 업데이트 후에 maxSdkVersion이 설정된 애플리케이션이 사용자의 기기에서 제거되는 경우가 있다.
    (사용자의 단말기를 펌웨어 업데이트 해서 버젼이 올라갔을때 maxSdkVersion이 낮은 애플리케이션이 지워질 수도 있다는 점)

android:compileSdkVersion

Gradle에 어떤 안드로이드 SDK버젼으로 앱을 컴파일할지 알려준다. 지원할 수 있는 가장 높은 API버전을 의미한다. 컴파일시에만 적용되므로 런타임에는 영향을 미치지 않는다.
항상 최신버전의 SDK를 지정하는것이 좋음.

추가자료 : API레벨이란?

API레벨은 Android플랫폼버젼에서 제공되는 프레임워크 API수정버전을 고유하게 식별하는 정수값.
플랫폼 버전API 레벨버전 코드참고
Android 7.024N플랫폼 하이라이트
Android 6.023M플랫폼 하이라이트
Android 5.122LOLLIPOP_MR1플랫폼 하이라이트
Android 5.021LOLLIPOP
Android 4.4W20KITKAT_WATCH웨어러블 전용 KitKat
Android 4.419KITKAT플랫폼 하이라이트
Android 4.318JELLY_BEAN_MR2플랫폼 하이라이트
Android 4.2, 4.2.217JELLY_BEAN_MR1플랫폼 하이라이트
Android 4.1, 4.1.116JELLY_BEAN플랫폼 하이라이트
Android 4.0.3, 4.0.415ICE_CREAM_SANDWICH_MR1플랫폼 하이라이트
Android 4.0, 4.0.1, 4.0.214ICE_CREAM_SANDWICH
Android 3.213HONEYCOMB_MR2
Android 3.1.x12HONEYCOMB_MR1플랫폼 하이라이트
Android 3.0.x11HONEYCOMB플랫폼 하이라이트
Android 2.3.4
Android 2.3.3
10GINGERBREAD_MR1플랫폼 하이라이트
Android 2.3.2
Android 2.3.1
Android 2.3
9GINGERBREAD
Android 2.2.x8FROYO플랫폼 하이라이트
Android 2.1.x7ECLAIR_MR1플랫폼 하이라이트
Android 2.0.16ECLAIR_0_1
Android 2.05ECLAIR
Android 1.64DONUT플랫폼 하이라이트
Android 1.53CUPCAKE플랫폼 하이라이트
Android 1.12BASE_1_1
Android 1.01BASE
End of Document