安卓系统版本

3
在我的Moto Maxx和Moto Razr HD(可能是所有Moto设备),在关于手机设置中有一个名为系统版本的条目。我正在编写一个应用程序,从手机中提取此信息,但我找不到Motorola从哪里提取此信息。所有的Build.VERSION、Build.DISPLAY等都不包含它。我甚至从Linux系统中读取了“/proc/version”,也没有包含它。有什么想法吗? 更新: 在大家的帮助下,我找到了正确的方向。我的解决方案是:
private String getDeviceBuildVersion() {
    //Get Moto Info
        String line = "Note sure...";
        try {
            Process ifc = Runtime.getRuntime().exec("getprop " + "ro.build.version.full");
            BufferedReader bis = new BufferedReader(new InputStreamReader(ifc.getInputStream()));
            line = bis.readLine();
            ifc.destroy();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    return line;
}
2个回答

2

很可能被存储为Android系统属性。

假设您通过adb连接到手机,请运行以下命令:

adb shell getprop

这将列出系统中设置的所有系统属性。查找该系统版本字符串,您将看到它存储为哪个属性。然后,当您知道它存储为属性的名称时,可以使用System.getProperty()以编程方式获取它。

如果它不在那里,那么摩托罗拉可能会将该字符串隐藏在其修改过的源代码中,不幸的是,您将无法获取它。


这让我朝着正确的方向前进,因为它在getprop中被列为'ro.build.version.full',尽管System.getProperty()无法返回它... - opt05
嗯,可能是受保护的属性。我所看到的唯一选项是使用隐藏的android.os.SystemProperties类。不过这可能会很麻烦,因为你需要使用反射。你可以在这里阅读更多信息:https://dev59.com/LHE85IYBdhLWcg3wvGAR。SystemProperties有一个get()方法,可能会返回你想要的值。我仍然不确定为什么System.getProperty()不起作用。 - vdelricco
如果您选择使用反射,这个也可能会派上用场。 - vdelricco
SystemProperties.get() 工作了,谢谢!不过你觉得这个方法和我之前发布的 Runtime.getRuntime().exec("getprop ") 方法有什么区别吗? - opt05
任何一种方式都可以,我倾向于使用SystemProperties的方式,因为我们不需要执行外部进程,但这真的取决于你。很高兴它对你有用! - vdelricco

1
请查看 android.os.Build.VERSIONCODENAME:当前开发代号,如果这是一个发布版本,则为字符串“REL”。 INCREMENTAL:底层源代码控制使用的内部值以表示此版本。 RELEASE:用户可见的版本字符串。

引用作者的话:“所有的Build.VERSION、Build.DISPLAY等都不包含它。” - Marcus
我希望他在发布这里之前已经尝试过Build.VERSION的所有属性。 - CodeWalker
这就是我对情况的理解。 - Marcus
1
@opt05:看一下 build.prop 文件。 - CodeWalker

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