2021년 5월 21일 금요일

[안드로이드] 플랫폼 버전별 API 레벨 및 버전코드

   개발을 진행하다 보면 사용자 단말의 안드로이드 버전에 따라 지원되는 기능과 지원되지 않는 기능이 있어 이를 버전별로 달리 처리해주어야 할 때가 있다. 이러한 경우를 대비하여 안드로이드 플랫폼 버전별 AP I레벨과 버전코드를 알아보고 버전별로 다른 동작을 수행하도록 하는 방법을 정리해 두고자 한다.

1. 안드로이드 플랫폼 버전별 API 레벨 및 버전코드 (2021.5)

플랫폼 버전

코드 명

API 레벨

버전 코드

Android 11

Android 11

30

R

Android 10.0

Android 10

29

Q

Android 9

Pie

28

P

Android 8.1

Oreo

27

O_MR1

Android 8.0

Oreo

26

O

Android 7.1.1

Nougat

25

N_MR1

Android 7.1

Android 7.0

Nougat

24

N

Android 6.0

Marshmallow

23

M

Android 5.0

Lollipop

22

LOLLIPOP_MR1

Android 5.0

Lollipop

21

LOLLIPOP

Android 4.4W

KitKat Wear

20

KITKAT_WATCH

Android 4.4

KitKat

19

KITKAT

Android 4.3

Jelly Bean

18

JELLY_BEAN_MR2

Android 4.2, 4.2.2

Jelly Bean

17

JELLY_BEAN_MR1

Android 4.1, 4.1.1

Jelly Bean

16

JELLY_BEAN

Android 4.0.3, 4.0.4

IceCreamSandwich

15

ICE_CREAM_SANDWICH_MR1

Android 4.0, 4.0.1, 4.0.2

IceCreamSandwich

14

ICE_CREAM_SANDWICH

Android 3.2

Honeycomb

13

HONEYCOMB_MR2

Android 3.1.x

Honeycomb

12

HONEYCOMB_MR1

Android 3.0.x

Honeycomb

11

HONEYCOMB

Android 2.3.4

Gingerbread

10

GINGERBREAD_MR1

Android 2.3.3

Android 2.3.2

Gingerbread

9

GINGERBREAD

Android 2.3.1

Android 2.3

Android 2.2.x

Froyo

8

FROYO

Android 2.1.x

Eclair

7

ECLAIR_MR1

Android 2.0.1

Eclair

6

ECLAIR_0_1

Android 2.0

Eclair

5

ECLAIR

Android 1.6

Donut

4

DONUT

Android 1.5

Cupcake

3

CUPCAKE

Android 1.1

Base

2

BASE_1_1

Android 1.0

Base

1

BASE


2. 버전코드별 다른 동작 수행 방법
1) 조건문을 통한 처리 방법

  ① API레벨 숫자를 쓰는 방법
    if (Build.VERSION.SDK_INT >= 26) {
        // 처리해야 할 코드
    }

  ② 버전 코드를 쓰는 방법
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        // 처리해야 할 코드
    }

 이렇게 조건을 주어 처리를 하면 minSdkVersion을 낮게 잡을 수 있고, 하위 안드로이드 버전을 쓰는 사용자들에게도 앱을 배포할 수 있다.

2) @TargetApi(version)

  Lint에러를 발생시키지 않는 역할만 한다. 예를 들어 minSdkVersion에 21을 설정하고 이보다 높은 API Level 26에 선언된 API를 사용할 경우 'requires API level 26(current min is 21)' 와 같은 Lint에러가 발생하는데 아래와 같이 TargetApi annotation을 선언해주면 Lint에러는 발생하지 않는다. 따라서 버전에 상관없이 호출 및 동작은 되지만, 버전에 따라 문제가 발생하는 API가 있다면 '1. 조건문을 통한 처리 방법'을 통하여 에러를 방지해야 한다.

@TargetApi(Build.VERSION_CODES.O)
public void Func(String text, int term) {
    ....
}

3) @RequireApi(version)

 minSdkVersion에 지정한 버전보다 낮은데 바로 호출할 경우 컴파일 에러가 발생하도록  호출조건을 강제하는 역할을 한다.

@RequiresApi(Build.VERSION_CODES.O)
private void Func() {
    ...
}

 위와 같이 RequireApi annotation이 선언되어 있다면 아래와 같이 조건을 주고 호출해야 컴파일 에러가 발생하지 않는다.

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    Func();
}


댓글 없음:

댓글 쓰기

[JAVA] hashMap에서 key값으로 Value값 찾기, Value값으로 key값 찾기

Java프로그램을 작성하다가 Color값 배열을 만들고 인덱스로 배열 값을 가져오다가 그 반대로 배열 값을 가지고 인덱스를 구해야 하는 상황이 발생하였다. 참고하려고 정리한다.  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...