Я пытался создать эмулятор терминала для Android. Будучи совершенно новым в этом, я решил выполнить каждую команду и сохранить вывод в файле, содержимое которого будет отображаться после каждого исполнения. Псевдо Код:Создание терминального эмулятора для Android
public Boolean execCommands(String command) {
try {
rt = Runtime.getRuntime();
process = rt.exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("echo $ \""+command+ "\" >> /sdcard/Android/data/terminalemulatorlog.txt\n\n\n");
/**** Note : String command = (EditText)findViewById(R.id.command).getText().toString(); ****/
os.flush();
os.writeBytes("exit\n");
os.flush();
process.waitFor();
}
// Error Handling
displayOutput(); //Loads and displays the Text File (/sdcard/Android/data/terminalemulatorlog.txt)
return true;
}
Этот кусок кода работает несколько специальных команд, за исключением (например, «ясно».). Но что меня больше беспокоит следующие проблемы:
- Каждый раз, когда команда должна быть выполнена, я в конечном итоге ищет разрешения суперпользователем (вторая строка кода). И я хотел бы покончить с этим.
В тех случаях, когда пользователь вводит одну команду, за которой следует другой,
Такие, как:cd /sdcard touch File.txt
File.txt создается в «/», а не в «/ SDCard». На данный момент, чтобы избежать этого, я отслеживаю все команды «cd», чтобы выяснить, что представляет собой настоящий рабочий каталог. И я надеюсь, что есть лучший способ обойти это.
Я был бы признателен, если кто-то может помочь мне здесь.
Почему бы не выполнить каждую команду по одному так же, как в терминале? Также просто избавьтесь от «su». Если пользователю нужны корневые привилегии, они должны выполнить команду «sudo mycommand» так же, как в терминале, вместо того, чтобы заставить все выполнять как root. – Jack
Я не уверен, почему, но сила приложения закрывается без «su». И я не знаю, как «выполнять каждую команду один за другим, как в терминале». Не могли бы вы предоставить альтернативный код? Благодаря! – Vishnu
Когда пользователь вводит команду и нажимает клавишу ввода, вы должны выполнить команду. Кажется, вы выполняете несколько команд или что-то еще? – Jack