1

您好我正在尝试从应用程序执行 shell 命令。尽管代码运行没有任何错误,但看不到输出。例如,我正在尝试复制文件。此命令工作正常,同时通过 shell 命令提示符执行。这是我使用的代码。从 LogCat 中的调试语句,我可以知道所有的代码块都被覆盖了。但是文件没有被复制。请提出解决方案。PS:我通过模拟器运行这个..

@Override
public void onClick(View v) {
    if (v.getId() == R.id.click_button){
        String[] commands = {"cp /mnt/sdcard/rr.txt /mnt/sdcard/zzzz.txt"};
        try {
            Log.d("Ac","before fun call.....");

            RunAsRoot(commands);
            Log.d("Ac","after fun call...");


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}
 public void RunAsRoot(String[] cmds) throws IOException{
     Process p = Runtime.getRuntime().exec("su");
     DataOutputStream os = new DataOutputStream(p.getOutputStream());            
     for (String tmpCmd : cmds) {
             os.writeBytes(tmpCmd+"\n");
            Log.d("Ac","inside...");

     }           
     os.writeBytes("exit\n");  
    Log.d("Ac","outsidee...");

     os.flush();

}

}

4

2 回答 2

1

在没有安装 BusyBox 的情况下,“cp”命令在 Android shell 上不可用。或者,您可以使用:

cat /mnt/sdcard/rr.txt > /mnt/sdcard/zzzz.txt

我所知道的。

希望这可以帮助。

于 2013-04-03T08:23:24.680 回答
1

看看:RootTools
我在需要执行 shell 命令的项目中使用这个库。

RootTools 为有根开发者提供了一套标准化的工具,用于开发有根应用程序。最后,我们将通过为开发人员提供强大、易于使用的库来实现这一目标,这将大大缩短开发时间并促进代码重用。该项目对任何认为自己有贡献的成熟开发人员开放。通过共同参与,我们可以简化我们自己的流程,提高我们应用程序的效率,学习新技术,并为我们的用户提供更好的体验。

于 2013-02-03T13:34:31.897 回答