如何在Android设备中以编程方式获取设备(AOSP)构建号?

18

如何从Android应用程序中以编程方式获取托管设备的“系统设置->关于平板电脑->版本号”中显示的版本号?

平板电脑上系统设置版本号

目前,我正在使用“android.os.Build”。


为什么大家会在这个问题上点踩?能告诉我原因吗? - Niranj Patel
2
构建/版本不同。 - Amit kumar
3
@payeli,这不是重复的。Amit Kumar,我同意你的观点。 - Niranj Patel
是的 @CapDroid,请帮忙。 - Amit kumar
@payeli 我检查了所有的问题.. 但他没有得到他想要的完美答案.. 不要只看问题标题。 - Niranj Patel
7个回答

18
检查这段代码:
Build.FINGERPRINT中,您将获得设备的Build Number
String mString = "";

  mString.concat("VERSION.RELEASE {" + Build.VERSION.RELEASE + "}");
  mString.concat("\nVERSION.INCREMENTAL {" + Build.VERSION.INCREMENTAL + "}");
  mString.concat("\nVERSION.SDK {" + Build.VERSION.SDK + "}");
  mString.concat("\nBOARD {" + Build.BOARD + "}");
  mString.concat("\nBRAND {" + Build.BRAND + "}");
  mString.concat("\nDEVICE {" + Build.DEVICE + "}");
  mString.concat("\nFINGERPRINT {" + Build.FINGERPRINT + "}");
  mString.concat("\nHOST {" + Build.HOST + "}");
  mString.concat("\nID {" + Build.ID + "}");

  ((TextView) findViewById(R.id.textView1)).setText(mString);

我的设备构建号:

My Device Build Number

以上代码返回的是指纹信息

enter image description here


1
mString = mString.concat("VERSION.RELEASE {" + Build.VERSION.RELEASE + "}");[...] - tardyp
1
我也在尝试获取构建号,但是设置中显示的值与Build.FINGERPRINT完全不匹配。 - takluiper
你在检查哪个操作系统版本,@takluiper? - anon
@SilentKiller 我测试了两个不同的设备,其中一个值是正确的,但另一个设备则完全不匹配。最后一个设备使用的 Android 版本为 4.4。 - takluiper

9

我使用String Build_Number = Build.DISPLAY;来获取手机设置中显示的构建号码。


6

要仅获取“设置”中“关于设备”中显示的版本号值,我们可以使用以下静态方法:

/**
 * This method returns Build Number of the device from the OS Build fingerprint
 * @return osBuildNumber - human entered name of the device
 */
public static String getOSBuildNumber() {
    String osBuildNumber = Build.FINGERPRINT;  //"google/shamu/shamu:5.1.1/LMY48Y/2364368:user/release-keys”
    final String forwardSlash = "/";
    String osReleaseVersion = Build.VERSION.RELEASE + forwardSlash;
    try {
        osBuildNumber = osBuildNumber.substring(osBuildNumber.indexOf(osReleaseVersion));  //"5.1.1/LMY48Y/2364368:user/release-keys”
        osBuildNumber = osBuildNumber.replace(osReleaseVersion, "");  //"LMY48Y/2364368:user/release-keys”
        osBuildNumber = osBuildNumber.substring(0, osBuildNumber.indexOf(forwardSlash)); //"LMY48Y"
    } catch (Exception e) {
        Log.e("getOSBuildNumber", "Exception while parsing - " + e.getMessage());
    }

    return osBuildNumber;
}

这将仅返回构建号的确切值。请记住,Android SDK会避免这样做。请检查BUILD类中的以下片段:

/** A string that uniquely identifies this build.  Do not attempt to parse this value. */
public static final String FINGERPRINT = deriveFingerprint();

/**
 * Some devices split the fingerprint components between multiple
 * partitions, so we might derive the fingerprint at runtime.
 */
private static String deriveFingerprint() {
    String finger = SystemProperties.get("ro.build.fingerprint");
    if (TextUtils.isEmpty(finger)) {
        finger = getString("ro.product.brand") + '/' +
                getString("ro.product.name") + '/' +
                getString("ro.product.device") + ':' +
                getString("ro.build.version.release") + '/' +
                getString("ro.build.id") + '/' +
                getString("ro.build.version.incremental") + ':' +
                getString("ro.build.type") + '/' +
                getString("ro.build.tags");
    }
    return finger;
}

上述方法只是对“deriveFingerprint()”方法中提供的数据进行逆向工程处理。

5
要获取此值,请使用Build.DISPLAY。以下是来自Verizon Note 2(Android 4.4.2上的SCH-I605)的示例:KOT49H.I605VRUFND7
要求:API 3或更高版本。

3
我希望它能够返回您想要的相同值。
String build_number = Build.FINGERPRINT;
System.out.println("Build Number" + build_number);

1
Build.FINGERPRINT不返回构建号。 - Amit kumar
你正在哪个设备上进行测试? - Niranj Patel

2
使用 Build.DISPLAY 获取构建编号。

0
Log.i("TAG", "SERIAL: " + Build.SERIAL);
Log.i("TAG","MODEL: " + Build.MODEL);
Log.i("TAG","ID: " + Build.ID);
Log.i("TAG","Manufacture: " + Build.MANUFACTURER);
Log.i("TAG","brand: " + Build.BRAND);
Log.i("TAG","type: " + Build.TYPE);
Log.i("TAG","user: " + Build.USER);
Log.i("TAG","BASE: " + Build.VERSION_CODES.BASE);
Log.i("TAG","INCREMENTAL " + Build.VERSION.INCREMENTAL);
Log.i("TAG","SDK  " + Build.VERSION.SDK);
Log.i("TAG","BOARD: " + Build.BOARD);
Log.i("TAG","BRAND " + Build.BRAND);
Log.i("TAG","HOST " + Build.HOST);
Log.i("TAG","FINGERPRINT: "+Build.FINGERPRINT);
Log.i("TAG","Version Code: " + Build.VERSION.RELEASE);

它将如何运作。


你想推断什么? - Zac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接