我的应用程序做的第一件事是检查“su”,因为它是应用程序工作所必需的。尽管它有时会起作用,但通常是在终端中键入“killall packageName ”之后。我已经完成了一个简单的测试应用程序,但我无法让它每次都能正常工作。发生的代码:
String[] args = new String[] { "su" };
Log.v(TAG, "run(" + Arrays.toString(args) + ")");
FutureTask<Process> task = new FutureTask<Process>(new Callable<Process>() {
@Override
public Process call() throws Exception {
return Runtime.getRuntime().exec(args);
}
});
try {
Executors.newSingleThreadExecutor().execute(task);
return task.get(10, TimeUnit.SECONDS);
} catch (Throwable t) {
task.cancel(true);
throw new IOException("failed to start process within 10 seconds", t);
}
完整项目:https ://github.com/chrulri/android_testexec
由于此应用程序首先运行 exec(),因此我无法关闭任何以前打开的文件描述符,如另一个 stackoverflow 问题中所述:https ://stackoverflow.com/a/11317150/1145705
PS:我在不同的设备上运行 Android 4.0.3 / 4.0.4。