さて、私は 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;
}
}
これはうまくいきます。プロセスが終了し、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;