Это не будет вашим полным решением, но это код, с которым я экспериментировал некоторое время назад.МОЖЕТ выполнить произвольную команду (код использует ls
здесь).Как вы можете видеть на скриншоте, диалог суперпользователя всплывает для ls
.
Первоначально я пытался открыть оболочку с помощью sh
, а затем выполнить команды внутри этой оболочки, чтобы только начальный диалог суперпользователя sh
каждый будет показан.Я видел приложения, которые, кажется, делают это, но я все еще не уверен, как это делается.Я подозреваю, что это то, что вы ищете, но по крайней мере с этим кодом вы можете запускать команды.:)
В любом случае, вот код.Вставьте его в скелет Android-приложения, и оно должно работать.
public class ShellCommandTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final StringBuilder log = new StringBuilder();
try{
ArrayList<String> commandLine = new ArrayList<String>();
commandLine.add("su");
commandLine.add("-c");
commandLine.add("ls");
Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[0]));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
for (String command : commandLine){
Log.i("SU_Test", command);
}
String line;
while ((line = bufferedReader.readLine()) != null){
log.append(line);
log.append("\n");
}
}
catch (IOException e){
Log.e("SU_Test", "Fail: " + e.getMessage());
}
Log.i("SU_Test", log.toString());
}
Удачи!