我有一个我扎根的模拟器(虽然我不确定它是什么 相关)
我正在尝试为我的论文构建一个根应用程序,当按钮是 按下,它试图找到一个数据库文件。
我正在尝试从中执行shell命令
在app(java代码)中,但我所能做的只是ls
。
当我尝试cd
到另一个文件夹时,它不起作用。在cd
之后
我执行pwd
或ls
仍然会为/
提供结果。
以下是我的代码的相关部分
Button btn_read = (Button) findViewById(R.id.button);
btn_read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*String s;
try {
Process p = Runtime.getRuntime().exec("ls -al");
p = Runtime.getRuntime().exec("adb shell");
p = Runtime.getRuntime().exec("cd data/data");
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
// read the output from the command
Log.d("ReadDB", "Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
Log.d("ReadDB", s);
}
// read any errors from the attempted command
Log.d("ReadDB", "Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
Log.d("ReadDB", s);
}
System.exit(0);
}
catch (IOException e) {
Log.d("ReadDB", "Exception happened - here's what I know: ");
e.printStackTrace();
System.exit(-1);
}*/
executeCommand(new String[] {
"sh", "-c", "ls -l"
});
/*executeCommand(new String[] {
"sh", "-c", "cd /mnt"
});*/
executeCommand(new String[] {
"sh", "-c", "ls -l data/data"
});
executeCommand(new String[] {
"sh", "-c", "pwd"
});
}
});
}
private static void executeCommand(String[] commands) {
Process p;
try {
p = Runtime.getRuntime().exec(commands);
p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
Log.d("ReadDB", line + "\n");
}
Log.d("ReadDB", "--------------------------------------------------------------------------------------");
} catch (Exception e) {
Log.d("ReadDB", "Exception occured");
e.printStackTrace();
}
}
有人可以帮忙吗?
答案 0 :(得分:1)
这些命令将在单独的subshells 中运行,因此无法实现。 的工作原理:
executeCommand(new String[] {
"sh", "-c", "cd /mnt && some other command"
});