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 |
비고 |
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 |
비고 |
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수정버전을 고유하게 식별하는 정수값.
End of Document
반응형
'개발이야기 > Android' 카테고리의 다른 글
Custom listview의 각 item에 animation 적용하기 (364) | 2018.12.13 |
---|---|
app의 강제종료로 인해 FCM cloud messaging 푸시를 받지 못하는 이유? (964) | 2018.09.12 |
[ConstraintLayout] 효과적인 ConstraintLayout 사용방법 (2130) | 2018.04.22 |
[Instance app]설치 없이 네이티브앱의 사용경험을 제공할 수 있는 방법 (1039) | 2018.04.22 |
구글 게임 플레이 서비스 디버깅 방법 (0) | 2017.09.12 |
안드로이드 HandlerThread 스레드 사용법 (1) | 2017.07.16 |