안녕하세요.

안드로이드 SDK 버전에  여러가지가 있구요.

프로젝트 생성할 때도  버전에 관해서 적는 부분이 있습니다.

http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

위 글에 보면 설명은 있지만   막상 읽어봐도  좀 막연하다는 느낌이라고할까요.


사용법은 아래와 같다고 하는데요.
<uses-sdk android:minSdkVersion="integer" 
         
android:targetSdkVersion="integer"
         
android:maxSdkVersion="integer" />

제가 이해한 대로 설명해 보겠습니다.
잘못된 점 있으면 지적해 주시구요 ^^


minSDKVersion : 작성하는 APP 설치 가능한 최소한의 버전이랍니다.
이 버전보다 낮은 버전의 OS에는 설치가 안된답니다.


targetSdkVersion : 전 이 값 사용해 본적이 없습니다.
설명 봐서는 이 버전에 맞추어서 테스팅 됬다는 의미같은데
왜 필요한지 모르겠습니다 ^^

maxSdkVersion : 최대 지원 OS 버전인데요.
OS 1.6까지는 이값을 체크해서 OS 버전보다 여기 적힌값이 낮으면 설치못하게 했는데요.
OS 2.0부터는 체크 부분자체를 제거해 버렸답니다. 즉 1.6 이하 OS가 아니면 작동안하는 없어진 기능일것입니다.
( 뭐 다시 2.2 나 최근버전에 다시 살렸는지 모르지만 별로 쓸모 없는 값이라 확인해 보지 않았습니다.)


위와 같기 때문에 실제로는 minSDKVersion 하나밖에 사용할 일이 없더군요.


폰의 OS버전 : 해당 폰이 지원하는 지원 가능한 최대 기능의 OS 버전 입니다.
만약 폰이 2.1 버전 OS가 설치되어 있다면 minSDKVersion 이 7 인거까지만 설치가 되구요.
minSDKVersion 가 8 (2.2) 인거 부터는 설치가 안된답니다.



그리고 APP 적는 버전 말고,

이클립스에서 target OS 버전을 선택하면 프로젝트 트리에

Android 2.3

이런식의 내용이 추가되고 컴파일이 되는데요.



이클립스의 target OS 버전 : 사용할 SDK 의 버전 입니다.


여기서 헷가리는 분들이 계신데요. (저도 처음에는 헷갈렸답니다.)

SDK를 버전이 폰 OS의 버전 같아야 되는 것을 알고 계시는 경우가 종종 있더라구요.
예들 들면, 폰의 OS 가 프로요(2.2) 라면 SDK를 2.2 를 써서 빌드해야 되는 것으로요.



만약, 1.6 이상의 모든 폰에서 지원하는 APP을 만들고 싶다면,


<uses-sdk android:minSdkVersion="4">
이클립스의 target OS버전 : OS 1.6

으로 해 주어야 하는 것으로 착각을 했었답니다.



이클립스의 target OS 버전은 그냥 컴파일에 사용할 SDK 버전이기 때문에
해당 버전에서 지워하지 않은 기능을 체크는 정도 이구요.

실제 실행가능한 폰의 구분은 minSdkVersion 을 가지고 설치가 되고,
설치 후에 실제 실행을 하다가 폰의 OS에 없는 기능을 호출하는 순간 프로그램이 죽는 것으로 알려준답니다.

Class Not found 이런 내용의 예외가 발생하면서 죽지요.



즉, 위 질문의 다시해 보면,
1.6 이상의 모든 폰에서 지원하는 APP을 만들고 싶다면 ?

<uses-sdk android:minSdkVersion="4">
이클립스의 target OS버전 : OS 1.6 이상 아무거나 (2.3 SDK 사용해도 무방함)
실제 API 사용은 OS 1.6에 있는 거만 사용

이렇게 하시면 된답니다.





PS : 안드로이드의 멀티스크린 개념의 OS 1.6 (API level 4) 부터 지원한 것이라서
화면의 해당도를 제대로 처리하기 위해서는
minSdkVersion 을 4 이상 주시거나
4 미만일 경우는 support-screens 값을 적절하게 주셔야 합니다.

http://developer.android.com/guide/practices/screens_support.html



수고하세요!