Как получить версию ядра Linux с помощью Android? - PullRequest
5 голосов
/ 08 марта 2011

Как я могу получить версию ядра Linux в приложении для Android?

Ответы [ 4 ]

13 голосов
/ 25 октября 2011

Не уверен на 100%, но я думаю, что для вызова "uname -r" потребуется root-доступ. В любом случае есть менее грязный способ сделать это:

System.getProperty("os.version");

Я нашел эту информацию здесь: http://cb1991.blogspot.com/2011/03/android-code-to-get-kernel-version.html

2 голосов
/ 15 марта 2013

Если вы хотите, чтобы полная версия ядра была показана в Android для телефона, это файл для анализа: / proc / version

Вот фрагмент исходного кода Android, который извлекает фактическую строку версии ядра:

private String getFormattedKernelVersion() {
    String procVersionStr;

    try {
        procVersionStr = readLine(FILENAME_PROC_VERSION);

        final String PROC_VERSION_REGEX =
            "\\w+\\s+" + /* ignore: Linux */
            "\\w+\\s+" + /* ignore: version */
            "([^\\s]+)\\s+" + /* group 1: 2.6.22-omap1 */
            "\\(([^\\s@]+(?:@[^\\s.]+)?)[^)]*\\)\\s+" + /* group 2: (xxxxxx@xxxxx.constant) */
            "\\((?:[^(]*\\([^)]*\\))?[^)]*\\)\\s+" + /* ignore: (gcc ..) */
            "([^\\s]+)\\s+" + /* group 3: #26 */
            "(?:PREEMPT\\s+)?" + /* ignore: PREEMPT (optional) */
            "(.+)"; /* group 4: date */

        Pattern p = Pattern.compile(PROC_VERSION_REGEX);
        Matcher m = p.matcher(procVersionStr);

        if (!m.matches()) {
            Log.e(LOG_TAG, "Regex did not match on /proc/version: " + procVersionStr);
            return "Unavailable";
        } else if (m.groupCount() < 4) {
            Log.e(LOG_TAG, "Regex match on /proc/version only returned " + m.groupCount()
                    + " groups");
            return "Unavailable";
        } else {
            return (new StringBuilder(m.group(1)).append("\n").append(
                    m.group(2)).append(" ").append(m.group(3)).append("\n")
                    .append(m.group(4))).toString();
        }
    } catch (IOException e) {
        Log.e(LOG_TAG,
            "IO Exception when getting kernel version for Device Info screen",
            e);

        return "Unavailable";
    }
}
1 голос
/ 08 марта 2011

Вызвать uname -r и прочитать его вывод из stdout. Это не должно быть слишком сложно. Вывод - просто номер версии.


Runtime.getRuntime().exec("uname -r");

Предполагая, что вы пишете код Java (насколько я знаю, приложения для Android написаны на Java), это может вам помочь: в-выполнить-а-команды-из-code.html

0 голосов
/ 03 марта 2014

Если вы делаете это из приложения, это даст вам строку версии ядра:

public static String readKernelVersion() {
    try {
        Process p = Runtime.getRuntime().exec("uname -a");
        InputStream is = null;
        if (p.waitFor() == 0) {
            is = p.getInputStream();
        } else {
            is = p.getErrorStream();
        }
        BufferedReader br = new BufferedReader(new InputStreamReader(is),
                BUFFER_SIZE);
        String line = br.readLine();
        br.close();
        return line;
    } catch (Exception ex) {
        return "ERROR: " + ex.getMessage();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...