본문 바로가기
기타 개발 관련/안드로이드 개념 정리

안드로이드 - compilesdkversion minsdkversion targetsdkversion buildtoolsversion

by 번데기 개발자 2018. 12. 12.
반응형





보통 이런 문제가 발생하게되면 compilesdkversion, minsdkversion 등을 확인해보게 됩니다.

그렇지만 잘 알고 쓴적은 없어서 이번기회에 한번 정리해보겠습니다.




 compileSdkVersion

  • compileSdkVersion으로 gradle에 어떤 안드로이드 SDK 버전으로 앱을 컴파일 할지 알려줍니다.
  • 컴파일 시에만 적용되므로 runtime동안에는 영향을 미치지 않습니다.
  • 항상 최신 버전의 SDK로 지정하는 것이 좋습니다.
  • 해당 버전에 포함된 API를 사용할 수 있다는 것을 의미합니다.
  • import문으로참조되는 클래스나 메소드를 찾을 때 어떤 버전의 SDK에서 찾을 것인가를 결정해줍니다.


예를 들어 아래와 같은 경우를 보겠습니다.



맨 처음 첨부한 스크린샷에서 빨간줄은 현재 compile 시에 사용하는 sdk버전보다 라이브러리의 버전이 높기 때문에 발생합니다.


compileSdkVersion을 25로 바꿔주게 되면 해결이 됩니다.

그럼 그 아래의 buildToolVersion은 무엇을 말하는지 알아보겠습니다.





buildToolVersion

  • build 툴의 버전을 나타냅니다. (즉 사용할 컴파일러의 버전을 의미합니다.)
  • buildToolVersion을 추가할때는 Project Structure 을 이용하면 간단히 설정할 수 있습니다.
  • 안드로이드 3.0 이후부터는 명시하지 않아도 동작합니다.





targetSdkVersion

  • minSdkVersion 이상에서 지원하는 어떤 기능을 이용하기 위함입니다.
  • 실제 컴파일시에는 관여하지 않으며, 실제 빌드시 버전을 낮추어도 원하는 클래스의 메소드를 컴파일 할 수 있습니다.
  • targetSdkVersion이 바뀌어야 앱의 행동로직이 바뀌므로, 안드로이드가 상위 호환성을 제공할 수 있습니다.
  • 예를 들어 Android 6.0에서 도입된 선택적 권한부여 (runtime permission model ) 행동 로직은 API23을 targetSdkVersion으로 지정해야 적용됩니다. 


타겟으로 하는 SdkVersion 이라는 뜻은 코드가 그 SdkVersion에 최적화 되었다 라고 볼 수 있습니다.

즉 Api21의 기능과 UI를 기준으로 앱의 디자인과 개발이 된 상태라면, 굳이 최신인 API25를 기준으로 하는 것을 오히려 좋지 않을 수 있습니다.

개발자가 예상하지 못하는 UI나 기능들을 API25의 플랫폼을 사용하는 유저가 접하게 될수도 있기 때문입니다.


따라서 이 targetSdkVersion 에서 만큼은 최신버전이 아니라 최적의 버전을 선택해서 사용해야 한다가 답이라고 할 수 있습니다.

물론 Android가 개발해놓은 최신 UI와 기능들을 API에 최적화 시켜 개발한다면 targetSdkVersion 도 최신버전을 사용 할 수 있습니다.




minSdkVersion

  • minSdkVersion 은 앱이 지원할 가장 낮은 API버전을 지정합니다.
  • Google Play에서 사용자의 기기에 앱이 설치될 수 있을지 결정하는 요소입니다.
  • minSdkVersion보다 높은 API를 사용하면 lint에서 경고를 띄워 알려주므로 미리 방지할 수 있습니다.
  • Support Library나 Google Play Service는 자체 minSdkVersion을 가지므로 이중 가장 높은 버전 이상으로 맞춰야 합니다.


즉 앱이 돌아갈 수 있는 최소한의 버전을 말합니다.

보통 안드로이드 스튜디오를 실행하면 초기에 minSdkVersion을 설정할 수 있는 화면이 나오게 됩니다.










(참고) Gradle로 SDK 버전 지정할 때  

  • compileSdkVersion, minSdkVersion, targetSdkVersion을 잘 설정해야 합니다. 모듈의 build.gradle파일에서 다음과 같이 설정 할 수 있습니다.






  • compileSdkVersion과는 달리 minSdkVersion과 targetSdkVersion은 AndroidManifest.xml에 다음처럼 생성됩니다.
  • 해당 파일의 내용을 고쳐도 무시되며, Gradle에서 설정한 대로 적용됩니다.





  • 세 종류의 SDK 버전 관계는 다음과 같습니다.




  • 안정적인 앱을 원한다면 다음처럼 설정하세요.









참고) 




반응형