ルート化された Android デバイスで作業しています。起動せずにスーパーユーザーとしてLinuxコマンドを実行する方法はありますか
Runtime.getRuntime().exec("su")
毎回?私を悩ませているのは、アプリにスーパーユーザー権限が付与されていることを示すトーストが毎回表示されることです。初めて su コマンドを発行すると、ダイアログが表示され、コマンドが実行されるたびに選択を記憶するように選択しても、トーストが表示されます。
ルート化された Android デバイスで作業しています。起動せずにスーパーユーザーとしてLinuxコマンドを実行する方法はありますか
Runtime.getRuntime().exec("su")
毎回?私を悩ませているのは、アプリにスーパーユーザー権限が付与されていることを示すトーストが毎回表示されることです。初めて su コマンドを発行すると、ダイアログが表示され、コマンドが実行されるたびに選択を記憶するように選択しても、トーストが表示されます。
何を実行したいのか、頻度がわからない。ただし、OutputStream で複数のコマンドを実行できるため、コマンドを配列などのキューに入れることができます。
public void runCommandsAsRoot(String[] cmds) throws IOException {
Process proc = Runtime.getRuntime().exec("su");
DataOutputStream oStream = new DataOutputStream(proc.getOutputStream());
for (String cmd : cmds) {
oStream.writeBytes(cmd + "\n");
}
oStream.writeBytes("exit\n");
oStream.flush();
}
次に、次のように呼び出します。
String[] commands = { "fistCommand", "secondCommand" };
runCommandsAsRoot(commands);
いいえ、提供されているデフォルトの su バイナリを使用している間は方法がありません。chainxx と chainfire の SU アプリの両方に、ポップアップを表示しないオプションがありますが、それはユーザーの選択です。
もちろん、いつでも独自の su バイナリをコンパイルして使用できます。これはオープン ソースです。これは、オープンな su バイナリを持つセキュリティ上の懸念に任せる可能性があり、ユーザーはおそらくこれを好まないでしょう。その場合、アプリケーションが操作を拒否しない場合に呼び出しを行っているかどうかをチェックする場所で、他のサブバイナリがどのように動作するかのようなことをしたいと思うでしょう。しかし、これはおそらくあなたがすべきことではありません。