我一直在尝试为 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;
}
这段代码除了一些特殊的命令(例如'clear')外都可以工作。但我更关心的是以下问题:
- 每次要执行命令时,我最终都会寻求超级用户权限(第二行代码)。我想取消这个。
如果用户输入一个命令,然后输入另一个命令,
例如:cd /sdcard touch File.txt
File.txt是在“/”中创建的,而不是在“/sdcard”中。到目前为止,为了避免这种情况,我一直在跟踪所有的“cd”命令,以确定当前的工作目录是什么。我希望有更好的方法来解决这个问题。
如果有人可以在这里帮助我,我将不胜感激。