我有带root的Android 7设备(可行)
我想通过OutputStream执行root命令,并通过InputStream获取有关结果的消息。
private void getSu() {
if (mProcess != null) return;
try {
mProcess = Runtime.getRuntime().exec("su");
} catch (IOException e) {
e.printStackTrace();
}
}
private void getStdOut() {
if (mStdOut != null) return;
getSu();
mStdOut = new DataOutputStream(mProcess.getOutputStream());
}
private void getStdIn() {
if (mStdIn != null) return;
getSu();
mStdIn = new BufferedReader(new InputStreamReader(mProcess.getInputStream()));
}
之后我尝试执行“mount”命令并读取该命令的结果。
getSu();
getStdOut();
getStdIn();
String[] mountLine = getMount(mStdOut, mStdIn, "/system");
private String[] getMount(@NonNull DataOutputStream stdOut, @NonNull BufferedReader stdIn, String string) {
String[] res=null;
try {
stdOut.writeBytes("mount");
stdOut.writeBytes("\n");
String str;
while ((str=stdIn.readLine()) != null) {
if (str.contains(string)) {
res = str.split(" ");
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return res;
}
此代码之前在Android 6上运行。但是在Android 7上我得到的InputSream充满了 \ u0000
我尝试通过 adb shell 执行此命令,结果很好。为什么我将InputSream充满 \ u0000 ?
答案 0 :(得分:0)
Android 7+需要:
stdOut.flush();
writeBytes()
之后