如何以编程方式在 Android 设备中获取设备 (AOSP) 内部版本号?

Posted

技术标签:

【中文标题】如何以编程方式在 Android 设备中获取设备 (AOSP) 内部版本号?【英文标题】:How to get device (AOSP) Build Number in Android devices programmatically? 【发布时间】:2014-01-08 22:12:29 【问题描述】:

android 应用程序中,如何以编程方式获取主机设备的内部版本号,如 系统设置 -> 关于平板电脑 -> 内部版本号 中所示,以便在 Java Android 应用程序中使用? p>

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

【问题讨论】:

为什么人们会在这个问题上投反对票?告诉我原因.. 这不是重复的问题。构建/版本不同。 @payeli 它不是重复的.. Amit kumar。我同意你的看法 是的 @CapDroid 请帮忙。 @payeli 我检查了所有问题.. 但他没有得到他想要的完美答案.. 不要问问题标题。 【参考方案1】:
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);

它会起作用的。

【讨论】:

你想推断什么?【参考方案2】:

我使用String Build_Number = Build.DISPLAY; 来获取电话设置中显示的内部版本号

【讨论】:

【参考方案3】:

使用 Build.DISPLAY 作为内部版本号

【讨论】:

【参考方案4】:

要获取此值,请使用Build.DISPLAY。这是来自 Verizon Note 2 的示例(Android 4.4.2 上的 SCH-I605):KOT49H.I605VRUFND7

要求:API 3 或更高版本。

【讨论】:

【参考方案5】:

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

/**
 * 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类中检查以下sn-p:

/** 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()”方法中提供的数据进行逆向工程。

【讨论】:

【参考方案6】:

检查此代码..

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

我的设备版本号:

FINGERPRINT以上代码返回

【讨论】:

mString = mString.concat("VERSION.RELEASE " + Build.VERSION.RELEASE + ""); [...] 我也在尝试获取内部版本号,设置中显示的值与 Build.FINGERPRINT 完全不匹配 @takluiper 您正在检查哪个操作系统版本? @SilentKiller 我用两种不同的设备进行了测试,其中一个设备的值是正确的,但另一个设备的值根本不匹配。上一个的Android版本是4.4【参考方案7】:

我希望它返回您想要的相同值..

String build_number = Build.FINGERPRINT;
System.out.println("Build Number" + build_number);

【讨论】:

Build.FINGERPRINT 不返回内部版本号 我得到 .. 你在哪个设备上测试?

以上是关于如何以编程方式在 Android 设备中获取设备 (AOSP) 内部版本号?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?

在android中以编程方式获取屏幕密度?

以编程方式获取设备的 Android API 级别?

如何以编程方式设置设备时间

如何以编程方式通过 Wifi 获取连接在同一网络上的其他设备的 IP 地址?

如何在 Android 上以编程方式从 Mac 地址获取 IP 地址?