我在模拟器上运行Android-6.0.0_r41版本,并且Linux内核是android-goldfish-3.4。在我的应用程序中,我需要读取/ system,/ proc,/ sys等文件,并且我知道我无法使用Java IO进行读取,因此我尝试使用runtime.getRuntime()。exec()方法读取这些文件。
我已经植根了仿真器,并禁用了selinux(setenforce 0)。但是我仍然无法读取这些文件。例如,我想通过cat命令读取/sys/kernel/security/ima/ascii_runtime_measurments
。我可以在adb shell中读取此文件,但无法使用exec()方法读取。以下是我用来读取此文件的代码。 str
是NULL
,我尝试了sleep,process.waitfor()方法,但都失败了。
此问题是由Android 6.0引起的吗?如果选择Android 5.0,是否可以读取/ data以外的文件?
private String checkexist() {
Process process;
String val = "";
try {
process = Runtime.getRuntime().exec("su");
OutputStream os = process.getOutputStream();
process.getErrorStream();
InputStream input = process.getInputStream();
os.write(("cat /sys/kernel/security/ima/ascii_runtime_measurments\n").getBytes());
os.write("exit\n".getBytes());
os.flush();
os.close();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(input));
while (true) {
String str = bufferedReader.readLine();
if (str == null)
break;
val = str;
}
} catch (Exception e) {
Toast.makeText(this, "exist\n" + e.toString(), Toast.LENGTH_LONG).show();
}
return val;
}