我们如何从Android应用程序中执行shell脚本文件?

时间:2011-02-10 13:00:18

标签: android permissions

我正在尝试从Android应用程序执行shell脚本。

首先,我尝试从Java运行Shell脚本,它适用于所有命令 例如pwdcdnetstat。移动文件,复制文件。

我已经从Android应用程序尝试了它,我得到了cdpwdnetstat的输出以及脚本中的echo语句,但是用于移动和复制文件无效。

当这些命令在adb shell中正常工作时,是否需要从脚本文件执行这些命令的任何权限?

我的代码看起来像这样:

void execCommandLine()
    {
       //***********************
        try
        {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec("ls -all");

            proc = rt.exec("sh /data/shTest.sh");
            InputStream is = proc.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line;

       while ((line = br.readLine()) != null) {
         System.out.println(line);
       }
           } catch (Throwable t)
          {
            t.printStackTrace();
          }

我的脚本文件如下:

#!/bin/sh
echo "Knowledge is Power"
echo "I am a script"
echo $PATH
netstat
pwd
cd /data
pwd
cd /system/bin
pwd
  mv  /data/local/hello.txt /data/
  cp  /data/local/hello1.txt /data/
cd /data/local/tmp
cd /system/bin

只有cpmv命令未显示预期结果。 请给我一些指导。

我正在尝试并将其测试到Emulator中。在/ system / bin有mv commond我也尝试过busybox但我没有得到预期的结果。对于root privilage如何继续......给出一些想法继续。

4 个答案:

答案 0 :(得分:4)

mvcp都让我在android shell中遇到麻烦。许多其他人使用cat x > y或类似的结果。

答案 1 :(得分:1)

有关可能发生在您身上的事情的一些提示。 你有根电话吗?你在/ system / bin中有命令mv和cp吗? 最后,您可以尝试使用busybox,如果您的手机有。 也许您应该首先请求root权限才能执行此操作...

答案 2 :(得分:1)

斯威尼已经给你一个解决方案,但这是一个解释。

Android不是GNU Linux,因此默认情况下cpmv非常不同。在Android上,他们只管理硬链接,例如,如果您尝试跨分区移动文件,它将使您的数据消失,因为它不会将数据从分区移动到分区,只需调整硬链接。 使用busybox或创建cpmv脚本,如果您无法更改脚本,那么cat file > otherfile和mv a rm file是必须的,但最好更改脚本,因为它使它们可以移植到没有黑客的系统。

答案 3 :(得分:0)

我使用的解决方案是一个符号链接。例如,如果在/ system / bin中不存在命令,如cp,grep或mv命令,那么busybox中肯定存在。 为此,我只使用命令(来自终端仿真器)重新安装/系统作为RW,而不是创建符号链接 su mount -o rw,remount /system cd /system/bin ln -s busybox cp # cp or other command