Android의 시스템 버전을 어떻게 확인할 수 있습니까?


494

누구 알고는 어떻게 (예를 들어 시스템의 버전을 확인할 수 있는가 1.0, 2.2프로그래밍 방식 등)?


이 바로 가기 (코드 또는 라이브 템플릿) 안드로이드 스튜디오에서이 검사를 추가하는 것입니다
바시르 AL-MOMANI에게

답변:


420

확인하십시오 android.os.Build.VERSION.

  • CODENAME: 현재 개발 코드 이름 또는 릴리스 빌드 인 경우 문자열 "REL"
  • INCREMENTAL:이 빌드를 나타 내기 위해 기본 소스 컨트롤에서 사용하는 내부 값입니다.
  • RELEASE: 사용자가 볼 수있는 버전 문자열입니다.

72
사용 방법에 대한 예가 있습니까?
Jonathan

1
이것에 대한 어려운 부분은 SDK_INT가 API 레벨 4에 정의되어 있으며 1-3에서 실패한다는 것입니다. 아무도 잘 처리하는 방법을 알고 있습니까?
Zordid

SDK는 API 1부터 사용할 수 있으며 INCREMENTAL은 모든 버전에서 사용할 수 있습니다.
nuala

1
Build.VERSION.RELEASE는 문자열이므로 원하는대로이 문자열을 사용할 수 있습니다.
paiego

8
원시인조차도 오늘 안드로이드 API 1-3을 사용하고 있다고 걱정하지 마십시오. @ 조르디 드
조쉬

811

사용 방법 예 :

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
     // only for gingerbread and newer versions
}

24
나는 Eclair (7), Android 2.1보다 이전 버전을 완전히 무시하고 곧 2.1에 대한 지원도 중단합니다. 그러나 SDK_INT 대신 SDK를 사용할 수 있습니다.
ATom

12
SDK는 API 레벨 4에서 삭제되었습니다. 대신 SDK_INT를 사용하십시오.
erdomester

질문이 있습니다 : GINGERBREAD보다 오래된 시스템에서 실행중인 경우 android.os.Build.VERSION_CODES.GINGERBREAD를 얻을 수 없습니다. 앱이 중단됩니까?
HongchaoZhang

GINGERBREAD는 Java 빌드 중에 숫자로 대체되기 때문에 아니오. 더 큰 컴파일 버전의 Android 만 사용해야합니다.
ATom

97

Build.Version 은이 데이터에 대한 장소입니다. 형식을 지정하는 방법에 대한 코드 스 니펫은 다음과 같습니다.

public String getAndroidVersion() {
    String release = Build.VERSION.RELEASE;
    int sdkVersion = Build.VERSION.SDK_INT;
    return "Android SDK: " + sdkVersion + " (" + release +")";
}

"Android SDK : 19 (4.4.4)"와 같은 모양입니다.


63
Build.VERSION.RELEASE;

그러면 실제 버전 번호가 표시됩니다. 일명 2.3.3 또는 2.2. Build.VERSION.SDK_INT 사용의 문제는 루팅 된 전화 또는 사용자 정의 롬이 있고 표준 OS (일명 안드로이드가 2.3.5를 실행 중임)가 없을 수 있으며 Build.VERSION.SDK_INT를 사용할 때 null을 반환합니다. 따라서 Build.VERSION.RELEASE는 무엇이든 작동합니다!


SDK에서 : "사용자가 볼 수있는 버전 문자열입니다 (예 :"1.0 "또는"3.4b5 "). .... "3.4b5"버전 번호를 어떻게 확인할 수 있습니까?
davs

전체 답변 2.3.3은 버전 번호 또는 2.2 또는 2.3.5입니다 (필자의 경우 사용자 정의 ROM). 전체 OS 버전 번호입니다.
팔콘 165o

메뉴 >> 설정 >> 전화 정보와 같은 것을 반환합니다. 펌웨어 버전 또는 그와 관련된 것으로 표시되어야합니다.
팔콘 165o

58
도대체 어떻게 int가 null을 반환 할 수 있습니까? SDK_INT는 기본 int입니다.
Zsolt Safrany

57

Marshmallow 이상인 장치 버전을 확인하려면이 코드를 사용하십시오.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){

    }

다른 사람들
을 괴롭히기 위해 kitkat의 K,
Nougat의 loolipop N의 L 과 같은 VERSION_CODES를 변경하십시오 ...


48

에서 Android 버전을 확인할 수 있습니다 Build.VERSION.

설명서 Build.VERSION.SDK_INT에서의 값 을 확인 하는 것이 좋습니다 Build.VERSION_CODES.

Build.VERSION.SDK_INTAPI 1.6 4 (Android 1.6 (도넛))에서만 소개 되었다는 것을 알고있는 한 괜찮습니다 . 따라서 이것은 영향을 미치지 않지만 Android 1.5 이하 버전에서 앱을 실행하려면 더 이상 사용되지 않는 것을 사용해야합니다 Build.VERSION.SDK.


30

답변에 대해서는 언급 할 수 없지만 Kaushik의 답변에는 큰 실수가 있습니다. SDK_INT는 시스템 버전과 동일하지 않지만 실제로는 API 레벨을 나타냅니다.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
    //this code will be executed on devices running ICS or later
}

Build.VERSION_CODES.ICE_CREAM_SANDWICH은 14와 같습니다. 14는 Ice Cream Sandwich의 API 레벨이며 시스템 버전은 4.0입니다. 따라서 4.0을 작성하면 4는 Donut의 API 레벨 ( Build.VERSION_CODES.DONUT4와 같음) 이기 때문에 Donut에서 시작하는 모든 장치에서 코드가 실행됩니다 .

if(Build.VERSION.SDK_INT >= 4.0){
    //this code will be executed on devices running on DONUT (NOT ICS) or later
}

이 예는 '매직 넘버'를 사용하는 것이 나쁜 습관 인 이유입니다.


7
실제로 Build.VERSION.SDK_INT는 버전 코드가 아닌 API 레벨입니다. 따라서 올바른 줄은if(Build.VERSION.SDK_INT >= 15){
erdomester

버전 코드가 API 수준과 동일하고 ICE_CREAM_SANDWICH의 SDK_INT가 15가 아니라 14 인 경우 어떻게해야합니까? @erdomester
Beyondo

19

예를 들어, 기능은 api21에서만 작동하며 다음은 api21에서 버그를 수정합니다.

    if(Build.VERSION.SDK_INT >= 21) {
    //only api 21 above
    }else{
   //only api 21 down
    }

19

Build.VERSION.SDK_INT 는 신뢰할 수 없다는 점에 유의 하십시오 .

따라서 현재 설치된 안드로이드 의 문자열 데이터 ( Android 버전 목록 기반)를 얻으려면 다음 과 같은 코드를 작성하십시오.

자바

//Current Android version data
public static String currentVersion(){
    double release=Double.parseDouble(Build.VERSION.RELEASE.replaceAll("(\\d+[.]\\d+)(.*)","$1"));
    String codeName="Unsupported";//below Jelly bean OR above Oreo
    if(release>=4.1 && release<4.4)codeName="Jelly Bean";
    else if(release<5)codeName="Kit Kat";
    else if(release<6)codeName="Lollipop";
    else if(release<7)codeName="Marshmallow";
    else if(release<8)codeName="Nougat";
    else if(release<9)codeName="Oreo";
    return codeName+" v"+release+", API Level: "+Build.VERSION.SDK_INT;
}

코 틀린

fun currentVersion(): String {
    val release = java.lang.Double.parseDouble(java.lang.String(Build.VERSION.RELEASE).replaceAll("(\\d+[.]\\d+)(.*)", "$1"))
    var codeName = "Unsupported"//below Jelly bean OR above Oreo
    if (release >= 4.1 && release < 4.4)  codeName = "Jelly Bean"
    else if (release < 5) codeName = "Kit Kat"
    else if (release < 6) codeName = "Lollipop"
    else if (release < 7) codeName = "Marshmallow"
    else if (release < 8) codeName = "Nougat"
    else if (release < 9) codeName = "Oreo"
    return codeName + " v" + release + ", API Level: " + Build.VERSION.SDK_INT
}

생성되는 출력의 예 :

마시멜로 v6.0, API 레벨 : 23


1
릴리스에 둘 이상의 점이 포함 된 경우 Double.parseDouble (Build.VERSION.RELEASE)에서이 코드가 충돌합니다. 예 : 7.1.1
Miklós Keresztes

@ MiklósKeresztes 유익한 의견 주셔서 감사합니다-답변이 수정되었습니다.
Nikita Kurtin

7
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you  like.
}

제공하는 솔루션에 대한 설명을 조금 더 추가하여 답변을 더 자세히 설명해 주시겠습니까?
abarisone 2016 년

3

이 수업을 사용하십시오

import android.os.Build;

/**
 * Created by MOMANI on 2016/04/14.
 */
public class AndroidVersionUtil {
    public static int getApiVersion() {
        return android.os.Build.VERSION.SDK_INT;
    }

    public static boolean isApiVersionGraterOrEqual(int thisVersion) {
        return android.os.Build.VERSION.SDK_INT >= thisVersion;
    }
}

3

이 방법을 사용하십시오 :

 public static String getAndroidVersion() {
        String versionName = "";

        try {
             versionName = String.valueOf(Build.VERSION.RELEASE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return versionName;
    }

이것이 어떻게 도움이 되나요?
사무엘 오우 이노

1

당신이 bash당신의 안드로이드 장치에 가지고, 당신은이 bash 기능을 사용할 수 있습니다

function androidCodeName {
    androidRelease=$(getprop ro.build.version.release)
    androidCodeName=$(getprop ro.build.version.codename)

    # Time "androidRelease" x10 to test it as an integer
    case $androidRelease in
        [0-9].[0-9]|[0-9].[0-9].|[0-9].[0-9].[0-9])  androidRelease=$(echo $androidRelease | cut -d. -f1-2 | tr -d .);;
        [0-9].) androidRelease=$(echo $androidRelease | sed 's/\./0/');;
        [0-9]) androidRelease+="0";;
    esac

    [ -n "$androidRelease" ] && [ $androidCodeName = REL ] && {
    # Do not use "androidCodeName" when it equals to "REL" but infer it from "androidRelease"
        androidCodeName=""
        case $androidRelease in
        10) androidCodeName+=NoCodename;;
        11) androidCodeName+="Petit Four";;
        15) androidCodeName+=Cupcake;;
        20|21) androidCodeName+=Eclair;;
        22) androidCodeName+=FroYo;;
        23) androidCodeName+=Gingerbread;;
        30|31|32) androidCodeName+=Honeycomb;;
        40) androidCodeName+="Ice Cream Sandwich";;
        41|42|43) androidCodeName+="Jelly Bean";;
        44) androidCodeName+=KitKat;;
        50|51) androidCodeName+=Lollipop;;
        60) androidCodeName+=Marshmallow;;
        70|71) androidCodeName+=Nougat;;
        80|81) androidCodeName+=Oreo;;
        90) androidCodeName+=Pie;;
        100) androidCodeName+=ToBeReleased;;
        *) androidCodeName=unknown;;
        esac
    }
    echo $androidCodeName
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.