Androidのシステムバージョンを確認するにはどうすればよいですか?


494

誰もが知っているが、どのように(例えば、システムのバージョンを確認することができず1.02.2プログラム的、など)?


Android Studioでこのチェックを追加するショートカット(コードスニペットまたはライブテンプレート)はありますか
Basheer AL-MOMANI

回答:


420

確認してくださいandroid.os.Build.VERSION

  • CODENAME:現在の開発コード名、またはリリースビルドの場合は文字列 "REL"。
  • INCREMENTAL:このビルドを表すために、基になるソース管理によって使用される内部値。
  • RELEASE:ユーザーに表示されるバージョン文字列。

72
それを使用する方法の例はありますか?
ジョナサン

1
これに関する難しい部分は、SDK_INTがAPIレベル4で定義されており、1〜3でそれを使用すると失敗することです。誰かがそれをうまく処理する方法を知っていますか?
Zordid

SDKはAPI 1以降で利用できます。また、INCREMENTALはすべてのバージョンで利用できます。
nuala

1
Build.VERSION.RELEASEは文字列であるため、この文字列を好きなように使用できます。
パイエゴ2012

8
心配しないでください。穴居人でさえ、今日はAndroid API 1〜3を使用していません。@Zordid
Josh、

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 2014年

私は質問があります:GINGERBREADより古いシステムで実行している場合、android.os.Build.VERSION_CODES.GINGERBREADを取得できません。アプリはクラッシュしますか?
HongchaoZhang 2016年

いいえ、GINGERBREADはJavaのビルド中に数字だけに置き換えられるためです。Androidのより大きなコンパイルバージョンを使用する必要があるだけです。
ATom 2017年

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を使用する場合の問題は、ルート化された電話またはカスタムROMを使用している場合、標準のOSが存在しない可能性があり(私のAndroidが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バージョン番号です。
Falcon165o

同じことを返しますメニュー>>設定>>電話について。ファームウェアバージョンなどのラベルが付いているはずです。
Falcon165o

58
一体どうやってintがnullを返すのでしょうか?SDK_INTはプリミティブintです。
Zsolt Safrany 2013

57

Marshmallow以降のデバイスバージョンを確認するには、このコードを使用します。

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

    }

他の人を確認するには、VERSION_CODESを変更します。たとえば、
Kはキットカット、
LはルーリポップNはヌガーなどです。


48

Androidのバージョンはで確認できますBuild.VERSION

ドキュメントBuild.VERSION.SDK_INTでは、の値と照合することをお勧めしていますBuild.VERSION_CODES

Build.VERSION.SDK_INTAPIレベル4、つまりAndroid 1.6(Donut)でのみ導入されたことを理解している限り、これは問題ありません。したがって、これは影響を与えませんが、アプリをAndroid 1.5以前で実行したい場合は、Build.VERSION.SDK代わりに非推奨のものを使用する必要があります。


30

回答についてコメントすることはできませんが、カウシクの回答には大きな誤りがあります。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はドーナツのAPIレベル(Build.VERSION_CODES.DONUT4に等しい)であるため、コードはドーナツから始まるすべてのデバイスで実行されます。

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 '24年

バージョンコードがAPIレベルと同じで、ICE_CREAM_SANDWICHのSDK_INTが15ではなく14であると伝えた場合はどうなりますか?@erdomester
Beyondo

19

たとえば、機能はapi21 upでのみ機能し、次にapi21 downでバグを修正します

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

19

Build.VERSION.SDK_INTは信頼できないことに注意してください。これは@ Falcon165oによって言及されており、最近、私もそれに遭遇しました。

現在インストールされているAndroidの文字列データ(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のための
ミクローシュKeresztes

@MiklósKeresztes有益なコメントをありがとう-私は私の答えを修正しました。
Nikita Kurtin

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

提供するソリューションについてもう少し説明を追加して、回答を詳しく説明していただけませんか?
abarisone 2015年

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;
    }

これはどのように役立ちますか?
samuel owino 2018年

1

あなたがbashあなたのAndroidデバイスを持っているとすれば、この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.