Android/기타 지식

Android API Level 및 버전 코드와 다양한 SDK 버전

jaesungLeee 2021. 11. 8. 18:56

1. Android API Level & Version Code

플랫폼 버전 API Level 출시일 Version Code
(Platform Name)
Android 12 31 Oct 4, 2021 S (Snow Cone)
Android 11 30 Sep 8, 2020 R (Red Velvet Cake)
Android 10.0 29 Sep 3, 2019 Q (Quince Tart)
Android 9 28 Aug 6, 2018 P (Pie)
Android 8.1 27 Dec 5, 2017 O_MR1 (Oreo)
Android 8.0 26 Aug 21, 2017 O (Oreo)
Android 7.1
Android 7.1.1
Android 7.1.2
25 Oct 4, 2016 N_MR1 (Nougat)
Android 7.0 24 Aug 22, 2016 N (Nougat)
Android 6.0
Android 6.0.1
23 Oct 2, 2015 M (Marshmallow)
Android 5.1
Android 5.1.1
22 Mar 2, 2015 LOLLIPOP_MR1 (Lollipop)
Android 5.0
Android 5.0.1
Android 5.0.2
21 Nov 4, 2014 LOLLIPOP (Lollipop)
Android 4.4W
Android 4.4W.2
20 June 25, 2014 KITKAT_WATCH (Kitkat Wear)
Android 4.4 19 Oct 31, 2013 KITKAT (Kitkat)
Android 4.3 18 July 24, 2013 JELLY_BEAN_MR2 (Jelly Bean)
Android 4.2
Android 4.2.2
17 Nov 13, 2012 JELLY_BEAN_MR1 (Jelly Bean)
Android 4.1
Android 4.1.1
16 July 9, 2012 JELLY_BEAN (Jelly Bean)
Android 4.0.3
Android 4.0.4
15 Dec 16, 2011 ICE_CREAM_SANDWICH_MR1
(IceCreamSandwich)
Android 4.0
Android 4.0.1
Android 4.0.2
14 Oct 18, 2011 ICE_CREAM_SANDWICH
(IceCreamSandwich)
Android 3.2 13 July 15, 2011 HONEYCOMB_MR2
(Honeycomb)
Android 3.1 12 May 10, 2011 HONEYCOMB_MR1
(Honeycomb)
Android 3.0 11 Feb 22, 2011 HONEYCOMB
(Honeycomb)

 

아래와 같이 버전에 따른 처리가 가능하다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.xxx) {
    // Version에 맞는 처리
}

 


2. API 버전 디바이스 점유율 (2021.11.05 기준)


3. 다양한 SDK Version

Android 어플리케이션은 일반적으로 Android 플랫폼의 가장 새로운 버전과 호환된다.

API 버전에 대한 거의 모든 변경사항은 이전 버전에서 추가된 것이므로 이후 버전 및 상위 API 레벨과 호환된다.

 

상위 호환성

이전 버전이 가장 최신 디바이스에서 실행이 잘 된다면 '상위 호환'이라고 한다. 예를 들어, 어떤 기능이 새롭게 나왔을 때 예전 버전을 실행해도 잘 작동한다면 상위 호환된다고 말한다.

 

하위 호환성

이전 버전에서 만든 것을 처리할 수 있다면 '하위 호환'이라고 한다. 예를 들어, 이전 버전에서 만든 Method를 다음 버전 혹은 최신 버전에서 사용 가능하다면 하위 호환된다고 말한다.

Android의 대부분 최신 버전에서는 이전 버전을 지원하기 때문에 하위 호환성 있는 어플리케이션을 만들 수 있다.

 

compileSdkVersion

어플리케이션 컴파일 시 사용되는 Android API Version을 의미한다. 즉, 실제 개발에 사용할 수 있는 Android API의 범위는 compileSdkVersion에 의해 결정된다. 일반적으로, 새로운 API Version이 배포될 때마다 compileSdkVersion의 값은 최신으로 유지하기를 권장하고 있다. 이는 targetSdkVersion을 변경하지 않는 한 실제 배포되는 어플리케이션에 대한 Side-Effect가 없기 때문이다.

 

예를 들어, 가장 최근에 발표된 Android 12 (API Level 31)에서는 Splash Screen을 쉽게 생성하는 API가 소개되었다. 이 기능을 사용하려면 Android Studio에 Android 12를 설치하고 compileSdkVersion을 31로 설정해야 한다. 만약, 이전 버전의 기기들에서 이 API를 사용하게 하려면 Splash Screen을 제공할 수 있는 대안을 마련해야 할 것이다.

이와 유사하게 몇몇 메소드가 deprecated 되어있는 경우에는 compile 시 warning을 만날 수도 있는데, compilesdkversion만 업데이트하는 경우 앱의 기능에는 영향을 미치지는 않고 새로운 API에 대한 접근만 할 수 있게 한다.

 

일반적으로 최신 API가 배포되면 compileSdkVersion을 먼저 올려 최신 API에 대한 대응이 완료된 후 targetSdkVersion을 올리게 된다. 또한, gradle에 buildToolVersion이 있는데, 정상적인 빌드를 수행하기 위해 compileSdkVersion을 올리면서 같이 최신 버전으로 맞춰주는 것을 권장하고 있다.

 

targetSdkVersion

어플리케이션이 디바이스에서 동작할 때 사용되는 Android API 버전을 의미한다. targetSdkVersion은 실제 어플리케이션 동작에 영향을 준다. 즉, 어플리케이션은 targetSdkVersion에 명시된 API 버전을 기준으로 동작하게 된다. 아래 세 가지 케이스로 분류할 수 있다.

 

Ex 1. 디바이스 OS Version (API 26) > targetSdkVersion (API 24)

디바이스는 API 버젼 26에서 제공하는 기능을 모두 사용할 수 있는 기기이다. 만약 어플리케이션의 targetSkVersion이 24일 경우, 이 디바이스는 API 26에서 제공하는 기능을 모두 사용할 수 있겠지만, 어플리케이션은 API 24를 기반으로 동작한다.

 

Ex 2. 디바이스 OS Version (API 26) == targetSdkVersion (API 26)

디바이스의 OS Version과 targetSdkVersion이 동일하기 때문에 어플리케이션은 API 26을 기반하여 정상적으로 동작한다.

 

Ex 3. 디바이스 OS Version (API 26) < targetSdkVersion (API 28)

targetSdkVersion이 디바이스 OS Version보다 높다 하여도 어플리케이션은 OS Version (API 26)을 기반으로 동작하게 된다.

 

minSdkVersion

어플리케이션이 지원할 수 있는 가장 낮은 API Version을 의미한다. Google Play에 어플리케이션 배포 시 사용자의 디바이스에 어플리케이션이 설치될 수 있는지를 결정하는 요소이다. 

 

일반적인 SdkVersion의 관계

minSdkVersion <= targetSdkVersion <= compileSdkVerseion 을 따른다.

 

안정적인 어플리케이션 운영을 원한다면?

minSdkVersion <= targetSdkVersion == compileSdkVerseion을 따른다.


References

https://vagabond95.me/posts/android-api-version-manage/

 

[Android] targetSdkVersion, compileSdkVersion, minSdkVersion 이란 무엇인가? - 기록은 기억을 지배한다

프로젝트를 새롭게 세팅 할 때 기본적으로 다음 세가지 값을 기본적으로 지정하곤 한다. 세팅 이후에는 크게 건드릴 일이 없기에 평소에는 크게 신경쓰이지 않는 값이다. targetSdkVersion compileSdkVer

vagabond95.me

https://duzi077.tistory.com/141

 

[Android] compileSdkVersion, targetSdkVersion 등 SDK 버전 설정 이해하기

compileSdkVersion, targetSdkVersion 등 SDK 버전 설정 알아보기 개념은 어설프게 알아와서 이번 포스팅으로 정확하게 이해하기 위해 정리했습니다. 안드로이드는 상위호환성을 중요시하기때문에 compileSd

duzi077.tistory.com