如何在 Android 应用程序中获取 Linux 内核的版本?
不是 100% 确定,但我认为调用“uname -r”需要 root 访问权限。无论如何,有一种不太肮脏的方法可以做到这一点,那就是:
System.getProperty("os.version");
我在这里找到了此信息:http://cb1991.blogspot.com/2011/03/android-code-to-get-kernel-version.html
如果您想要Android中显示有关手机的完整内核版本,请解析以下文件: /proc/版本
以下是 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: ([email protected]) */
"\\((?:[^(]*\\([^)]*\\))?[^)]*\\)\\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";
}
}
调用
uname -r
并从 stdout
读取其输出。应该不会太复杂。输出只是版本号。
Runtime.getRuntime().exec("uname -r");
假设您编写Java代码(据我所知Android应用程序是用Java编写的),这可能对您有帮助:http://www.java-tips.org/java-se-tips/java.lang/how-从-code.html 执行命令
如果您从应用程序执行此操作,这将为您提供内核版本字符串:
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();
}
}