好吧我看了ProcessBuilder(它也存在於android中)。但我仍然遇到問題。
while ((line = buffer.readLine()) != null) {
data = line;
}
if (data != null && data.contains("uid=0")) {
return true;
}
這將提供與以前相同的問題。它無處可逃。但是,如果我將代碼更改爲
while ((line = buffer.readLine()) != null) {
if (data != null && data.contains("uid=0")) {
return true;
}
}
這將工作正常。這個過程將會結束,並且它將會返回真實。問題是爲了讓我使用這個,我必須非常清楚地知道作爲返回數據(我在這個測試方法中做了什麼)。所以這不可能是解決方案。
這裏是整個測試方法
try {
ProcessBuilder builder = new ProcessBuilder("su");
builder.redirectErrorStream(true);
Process process = builder.start();
DataOutputStream output = new DataOutputStream(process.getOutputStream());
InputStreamReader reader = new InputStreamReader(process.getInputStream());
BufferedReader buffer = new BufferedReader(reader);
output.writeBytes("id\n");
output.flush();
String line = null;
String data = null;
while ((line = buffer.readLine()) != null) {
data = line;
}
if (data != null && data.contains("uid=0")) {
return true;
}
} catch(Throwable e) {
Log.d(TAG, "Root access rejected [" + e.getClass().getName() + "] : " + e.getMessage());
}
return false;
什麼你試試? –
你可能沒有完全正確地讀取它的stdout/stderr流 –
好的,你能否提供一個如何正確的讀取它的例子? –