2014-12-05 73 views
0
  • 我有我的根深蒂固仿真器(虽然我不知道它的 相关)Android的 - 不能在模拟器执行简单的CD

  • 我试图建立一个根的应用程序为我的当按下按钮时,它试图找到一个数据库文件。

  • 我已经到了要尝试从应用程序(java代码)中的 执行shell命令的地步,但我所能做的只是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(); 
        } 
    } 
    

谁能帮助我的代码的相关部分?

+0

谢谢!它似乎在工作 – Warmaster 2014-12-05 13:54:18

回答

1

该命令将运行在单独的subshells,所以这是不可能的。什么应该工作:

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