[Android] SDK Version 설정을 왜 그 버전으로 할까?

Jay·2021년 3월 17일
2

Android

목록 보기
24/39
post-thumbnail
post-custom-banner

우선,
안드로이드에서는 상위 호환성을 중요시하여 compileSdkVersion, minSdkVersion, targetSdkVersion 이라는 개념이 있다.

상위 호환성

  • 예전 버전이 최신 단말기에서 실행이 잘 된다면 '상위 호환'
    ex) 최신 단말기에서 핀치 투 줌(터치로 확대/축소)인 기능이 나왔을 때 예전 버전을 실행해도 핀치 투 줌이 동작하면 상위 호환이 잘 된다는 것

하위 호환성

  • 이전 버전에서 만든 입력값을 처리할 수 있다면 '하위 호환'
    이전 버전에서 만든 메소드를 다음 저전에 삭제 안하고 그대로 가져감.

일반 사용자들이 최신 SDK가 나올 때마다 업데이트 하지 않을 수 도 있기에!

compileSdkVersion

  • gradle에 어떤 안드로이드 SDK 버전으로 앱을 컴파일 할 것 인지 알려준다.
    즉, 지원 가능한 가장 높은 API 버전을 의미한다.
  • 컴파일 시에만 적용되기에 런타임 동안은 영향 받지 않는다.
    - 항상 최신 버전의 SDK로 지정하는 것이 좋다.
  • import문으로 참조되는 클래스나 메소드를 찾을 때 어떤 버전의 SDK에서 찾을지 결정해준다.

minSdkVersion

  • minSdkVersion보다 낮은 API 버전 앱은 설치할 수 없다.
  • minSdkVersion보다 높은 API를 사용하면 lint 경고를 띄워 알려준다.
  • Support Library나 Google Play servcie는 자체 minSdkVersion을 가지므로 이 중 가장 높은 버전으로 맞춰야 한다.

targetSdkVersion

  • 우리 어플이 호환성을 맞춘 버전이다!
  • 해당 버전에 최적화 되어 있다!
  • 최신 버전보다도 최적의 버전으로!
  • minSdkVersion 이상에서 지원하는 어떤 기능을 사용하고자 위함.
  • 실제 컴파일에는 관여하지 않고, 빌드 시 버전을 낮춰 원하는 클래스의 메소드를 컴파일 할 수 있다.
  • 지정한 버전까지 앱을 테스트 했음을 의미한다. 기기가 Nougat(API 24)라도 target이 MarshMellow(API 23)이라면 MarshMellow 단말기까지 정상동작 됨을 의미하여 Nougat 기기는 정상적으로 돌아갈지 확신할 수 없다. 상위 호환되는 API로 개발을 했다면 잘 돌아갈 것이다.
  • 즉, targetSdkVersion이 달라야 앱의 행동 로직이 달라지므로, 안드로이드가 상위호환성을 제공할 수 있다.
  • Marshmellow(API 23)에서 도입된 런타입 퍼미션은 targetSdkVersion을 API 23으로 지정해야 적용된다.
    compileSdkVersion을 25로하고 targetSdkVersion을 21로 하면 Marshmellow 이상 단말기에서 런타임 퍼미션이 Marshmellow 이전처럼 강제 허용되어 있다. 허용을 해제하려고 하면 이전 버전으로 빌드된 앱이라고 메세지가 출력된다.
  • targetSdkVersion이 22라면 22 이후 버전에서 지원되는 기능이 제외된 앱이 만들어지기에 런타임 퍼미션을 사용 못하는 것이다.

안정적인 앱을 원한다면

minSdkVersion <= targetSdkVersion == compileSdkVersion

buildToolVersion

  • build 툴의 버전. (사용할 컴파일러의 버전을 의미)

🙌

  • minSdk : 21 / targetSdk : 28 / OS SDK : 30
    -> 위와 같다면 나는 28에 맞춰서 호환성을 맞춰 놨으니 실제 단말기에선 하위 호환성 기능을 활성화 시켜서 동작시켜야 할 것이고 완벽한 동작을 보장할 수 없다.

  • minSdk : 23 / targetSdk : 30 / OS SDK : 27
    -> 위와 같다면 호환성을 30에 맞춰두었기에 27에서 동작하는 단말기가 잘 동작하도록 상위 호환 되도록 개발이 되었을 것이다. 위에서 보았듯 targetSdk는 테스트를 하고서 버전업을 하기에!

profile
developer
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 3월 7일

같은 분이신건가요? https://duzi077.tistory.com/141

답글 달기