Android - 无法在模拟器中执行简单的cd

时间:2014-12-05 12:10:21

标签: java android shell command emulation

  • 我有一个我扎根的模拟器(虽然我不确定它是什么 相关)

  • 我正在尝试为我的论文构建一个根应用程序,当按钮是 按下,它试图找到一个数据库文件。

  • 我正在尝试从中执行shell命令 在app(java代码)中,但我所能做的只是ls

  • 当我尝试cd到另一个文件夹时,它不起作用。在cd之后 我执行pwdls仍然会为/提供结果。

  • 以下是我的代码的相关部分

    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();
        }
    }
    

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

这些命令将在单独的subshells 中运行,因此无法实现。 的工作原理:

executeCommand(new String[] {
    "sh", "-c", "cd /mnt && some other command"
});