Sunday, December 23, 2012

도대체 어느 API 레벨에 맞춰 개발해야하는 거야?




보통 범하기 쉬운 실수가 '2.1에서 젤리빈(Jelly Bean)까지, 어느 플랫폼에서든 돌아가는 앱을 만들어야지' 생각하면서 타겟을 떡하니 2.1로 잡는 것이다. 결론부터 말하자면 '넌 잘못 생각해도 너~~~~무 잘못 생각한겨'

자 지금부터 version을 지정하는 몇 개의 값들을 하나 하나 살펴보면서 어떻게 설정해서 작업을 해야할지를 생각해 보자.

AndroidManifest.xml  파일에서 <uses-sdk> 태그 많이 봤지? 이게 뭘까? android:minSdkVersion 애트리뷰트는?

각 태그의 의미부터 짚어볼까?


  • android:minSdkVersion : 이름에서 딱 보이지? 내가 만든 입이 동작할 수 있는 가장 아래의 API 레벨을 말하는 거야.  이 값은 플레이 스토어에서 '네가 가진 기기에서 동작시킬 수 있는 앱을 찾아주지' 하면서 사용하는 최소 레벨 값이야. 아마 모든 앱이 자기에게 맞는 값을 지정해 두어야 할 거야.
  • android:maxSdkVersion : 이건 앞에 것과 다르게 최대값이지. 이것도 마찬가지로 플레이 스토어가 사용하는 검색 조건 값이 되겠네. 근데, 여기서 기억할 게 있어. 이건 굳이 지정해 주지 않아도 별 문제 없을 거란 말이지. 안드로이드는 추가적인 상위 레벨의 API 버전을 내놓으면서 이전 버전에 대한 지원을 잊지 않잖아. (굳이 max 값을 지정할 필욘 없겠네)
  • android:targetSdkVersion : 앞의 두 값과는 다르게, 이건 (사용자가 참고하기 위한 값이 아니라) 안드로이드 플랫폼 자신이 사용하기 위한 값이야. 이 값은 여러분이 테스트하고자하는 최대 값의 API 레벨로 지정해 줘야해.  지정해 주지 않으면? minSdkVersion 값이 디폴트 값이 될 거거든.


처음 공부하는 많은 사람들이 이걸 그냥 쉽게만 생각하고 별거 아닐거라 생각하지만, 이건 아주 중요한 부분이야.

안드로이드 플랫폼이 점차 발전하면서(너무 잦아서 이거 아주...환장할 지경이지만) 새로운 기능이나 기술이 추가되기도 하고 삭제되기도 하고 그러잖아?  이전 버전에 대한 호환성(backward compatibility)을 보장해 주지 않는다면 어떻게 되겠어? 새로운 버전을 탑재한 디바이스에서는 이전에 만든 앱이 제대로 작동하지 않겠지? 이러한 문제를 미리 막기 위해서 안드로이드 시스템도 뭔가는 해줘야해. 호환성을 위한 어떤 행동이든 꼭 취해져야 한다는 거지.

그래서....
먼저 (시스템은) targetSdkVersion 값을 살피는 거야. 미리 준비하기 위해서지.
그리고, 그 값에 근거해서 대비책을 강구하는 거고... (만약 새롭게 추가된 기능을 사용한다면 그것을 대체할 이전 버전의 기능이 뭔지도 살필거고, 다른 스타일로 어떻거 표현해야할지도 정할테고... 이러한 행동들이 취해질 거란 얘기야.)
android:minSdkVersion 값보다 targetSdkVersion 값을 높게 지정한다고 해서 어떤 심각한 문제가 발생하진 않을거란 걸 알겠지? targetSdkVersion이라는 말 그대로 여러분의 앱이 설치되어질 실제 디바이스의 대세가 뭔지를 미리 알아봐서 그것을 타겟으로 잡으면 된다는 거야.

그럼 결론을 내려볼까? 2.1이상에서 돌아가는 앱을 작성한다고 targetSdkVersion을 2.1로 잡을 필요가 없다!!


그럼 ,  빌드 타겟은?

Build Target은 이클립스 같은 IDE 툴들이 개발자에게 '어떤 API를 제공해서 개발하도록 도와줄까' 하면서 사용하는 값이잖아.  빌드 타겟이 결과물에 영향을 주진 않아.  그렇기 때문에, 여러분이 레벨15을 토대로 개발하더라도 레벨7,8 에서도 그 앱은 돌아가니까 너무 걱정하지마.하지만 왠만하면 targetSdkVersion과 맞추는 게 낫겠지.






No comments:

Post a Comment