安卓获取处理器型号

12

我想获取类似于DU Booster的处理器型号。CPU型号包括ARM处理器版本和修订版本,例如:ARMv7处理器rev 3(v7l)。

我已尝试使用System.getProperty("os.arch"),但它仅返回体系结构。

String[] args = {"/system/bin/cat", "/proc/cpuinfo"}; 

获取 CPU 信息。在一些设备上,我能够获取正确的信息,但不是所有设备都可以。

我在 Asus Fonepad 7 上尝试过,但它没有返回处理器属性(但返回 processor(small p))

它返回的信息如下:

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 53
model name  : Intel(R) Atom(TM) CPU Z2520  @ 1.20GHz
stepping    : 1
microcode   : 0x10e
cpu MHz     : 800.000
cache size  : 512 KB
physical id : 0
siblings    : 4

我希望获得像"ARMv7 Processor rev 3 (v7l)"这样的结果。提前致谢。

2个回答

16

您无需实现分开的方法来处理不同类型的处理器,只需在获取/proc/cpuinfo文件时,将model_name键简单替换为cpu_model

    public static Map<String, String> getCPUInfo () throws IOException {

        BufferedReader br = new BufferedReader (new FileReader ("/proc/cpuinfo"));

        String str;

        Map<String, String> output = new HashMap<> ();

        while ((str = br.readLine ()) != null) {

            String[] data = str.split (":");

            if (data.length > 1) {

                String key = data[0].trim ().replace (" ", "_");
                if (key.equals ("model_name")) key = "cpu_model";

                output.put (key, data[1].trim ());

            }

        }

        br.close ();

        return output;

    }

最近的设备上无法工作,还有其他获取信息的选项吗? - 3c71
@3c71 只需获取已Root的设备并检查 /system/bin/cat/proc/cpuinfo(可能还有其他文件)是否包含与CPU相关的字符串信息(可能会有所不同)。 - Acuna
拿任何最近的搭载高通处理器的设备,你在/proc/cpuinfo中找不到任何有用的信息。我目前有两台设备,而且所说的“最近”是指几年前的设备。否则,我知道如何阅读答案,并且已经使用那个文件超过10年了。 - 3c71
所以您可以下载任何设备信息应用程序,并检查它是否在新设备上显示CPU信息,因为有些事情不幸是不可能的。 - Acuna
有些应用程序能够使用C库提供精确的处理器型号,或者我相信它们使用远程服务器根据实际序列号或型号查询CPU名称。 - 3c71

1
这是一种简单的方法,您可以使用模式来实现,但那需要很多的试错。
String unparsed_CPU_INFO;

onCreate{

        // cpu info
                    String result = null;
                    CMDExecute cmdexe = new CMDExecute();
                    try {
                        String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
                        result = cmdexe.run(args, "/system/bin/");
                        Log.i("result", "result=" + result);
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }


                    unparsed_CPU_INFO = result;

System.out.println("Your cpu model is: " ++ getCPUName());
}

    public synchronized String getCPUName() {
                if (cpuName == null) {
                    String CPUName = "";

                    String[] lines = unparsed_CPU_INFO.split("\n");

                    for (int i = 0; i < lines.length; i++) {

                        String temp = lines[i];

                        if (lines[i].contains("Processor\t:")) {

                            CPUName = lines[i].replace("Processor\t: ", "");
                            break;
                        }
                    }
                    cpuName = CPUName;
                    return CPUName;
                } else {
                    return cpuName;
                }
            }

如我在问题中提到的,我已经使用了String[] args = {"/system/bin/cat", "/proc/cpuinfo"}; 但结果中没有“Processor”字符串。 - Rakesh Yadav
@Android程序员,你问题中的示例是字符串的真实值吗?那我会相应地进行更改。 - tim687
那是 Processor 后面的行的值。如果你在问题中的示例是确切的值,你应该将 Processor 更改为型号名称。 - tim687
这在最近的设备上已经不再起作用了,几年来还有其他方法吗? - 3c71

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