Получение удобочитаемой информации о процессоре - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь получить информацию о процессоре смартфона. Я могу получить это из отображения файла / proc / cpuinfo. Однако его вывод плохой и нечитаемый. Я хотел бы получить вывод, подобный команде «lscpu», но когда я выполняю команду «lscpu» из своего приложения, у меня нет разрешений на это (однако я могу сделать это с консоли Termux на моем телефоне, и вывод доступен для чтения). У вас есть какие-либо идеи, как сделать человека читаемым?

Вот код для просмотра файла / proc / cpuinfo:

static class CMDExecute {
    synchronized String run(String[] cmd)
            throws IOException {
        String result = "";

        try {
            ProcessBuilder builder = new ProcessBuilder(cmd);
            builder.redirectErrorStream(true);
            Process process = builder.start();
            InputStream in = process.getInputStream();
            byte[] re = new byte[1024];
            while (in.read(re) != -1) {
                System.out.println(new String(re));
                result = result + new String(re);
            }
            in.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return result;
    }
}

private static StringBuffer buffer;

public static void fetch_cpu_info() {
    String result = null;
    CMDExecute cmdexe = new CMDExecute();
    try {
        String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
        result = cmdexe.run(args);
        System.out.println("RESULT\n" + result);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

и его вывод:

I / System .out: RESULT

processor   : 0
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4
processor   : 1
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4
processor   : 2
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4
processor   : 3
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

Как вы видите, это очень плохой результат. Когда я пытаюсь выполнить команду «lscpu» из моего кода, меняя только одну строку:

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

на

        String[] args = {"lscpu"};

Я получаю ошибку:

W / System.err: java .io.IOException: Невозможно запустить программу "lscpu": ошибка = 13, разрешение отклонено

Однако на моем телефоне установлено приложение Termux. Это консоль оболочки, и я не знаю почему, но я могу выполнить «lscpu» в этой консоли (я не могу из кода приложения). Проверьте это:

lscpuoutput

Я хотел бы получить этот вывод в свое приложение. Есть ли у вас какие-либо идеи, как получить этот приятный для восприятия человек вывод информации о процессоре?

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 06 марта 2020

OK. Я смог решить проблему по большей части. Фокусироваться только на / proc / cpuinfo было не очень хорошей идеей. Вместо этого мне удалось получить интересную информацию об оборудовании:

Получить производителя и модель смартфона. В моем случае вывод: "samsung SM-J730F":

    String manufacturer = Build.MANUFACTURER;
    String model = Build.MODEL;

Эта команда показывает количество ядер процессора:

    Runtime.getRuntime().availableProcessors()

Из этого файла вы можете получить частоту вашего процессора. Не забудьте использовать .trim (), потому что этот файл может содержать символ пробела, как это было в моем случае, и у меня была проблема с преобразованием результата в float для дальнейших операций:

   ("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq").trim()

Файл, содержащий количество онлайн-процессоров:

   /sys/devices/system/cpu/online

Файл, содержащий количество автономных процессоров. Если все процессоры подключены к сети, этот файл кажется пустым, но он может содержать пробельные символы:

  ("/sys/devices/system/cpu/offline").trim()

Команда для получения архитектуры:

System.getProperty("os.arch")

Со всем этим я создал хороший, человек читаемый вывод. Я думаю, что этот топи c может быть закрыт. С наилучшими пожеланиями!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...