システム権限を持つ自分のプログラムから su コマンドを実行しようとすると、stderr で次のエラーが返されました。
uid 1000 は su を許可されていません
共有 uid を android.uid.system または android.uid.shell に設定していますが、何も変わりません。デバイスはおそらくルート化されています。何が起こるか本当にわかりません。
コードは次のとおりです。
private boolean runAsRoot(String cmd, File workdir) throws IOException {
Log.i(LOG_TAG, "Execute command as root: " + cmd);
Process p = Runtime.getRuntime().exec(new String[] {"su", "-c", cmd});
if (p == null) {
Log.e(LOG_TAG, "cannot create process for " + cmd);
return false;
}
int exit = -1;
try {
exit = p.waitFor();
InputStreamReader isr;
if (exit == 0) {
isr = new InputStreamReader(p.getInputStream());
} else {
isr = new InputStreamReader(p.getErrorStream());
}
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
if (sb.length() > 0) {
sb.append('\n');
}
sb.append(line);
}
String string = sb.toString();
Log.l(LOG_TAG, exit == 0 ? Level.INFO : Level.SEVERE, string);
} catch (InterruptedException e) {
Log.e(LOG_TAG, e);
}
return exit == 0;
}