반응형
보통 이런 문제가 발생하게되면 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 버전 관계는 다음과 같습니다.
- 안정적인 앱을 원한다면 다음처럼 설정하세요.
참고)
반응형
'Native 개발 > 안드로이드 개념 정리' 카테고리의 다른 글
안드로이드 - 키스토어 개념 / 사용법 (2) | 2019.01.09 |
---|---|
안드로이드 - FragmentPagerAdapter, FragmentStatePagerAdapter 를 사용하여 ViewPager사용하기 (0) | 2019.01.09 |
안드로이드 - 앨범 / 카메라로 사진 이미지 가져오기 (+ Crop 기능) (7) | 2018.12.14 |
안드로이드 - 자신의 앱의 아이콘 변경하기 (0) | 2018.11.20 |
Functional Reactive Programming - 개념 정리 (1) | 2018.08.01 |