Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从我的Android应用程序执行shell脚本文件?_Android_Permissions - Fatal编程技术网

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

如何从我的Android应用程序执行shell脚本文件?,android,permissions,Android,Permissions,我正在尝试从我的Android应用程序执行一个shell脚本 首先,我尝试从Java运行Shell脚本,它可以很好地用于所有命令 像pwd,cd,netstat。移动文件,复制文件 然后我在Android应用程序中尝试了它,我得到了cd、pwd、netstat的输出,以及脚本中的echo语句,但移动和复制文件不起作用 当这些命令在adb shell中正常工作时,从脚本文件执行这些命令是否需要任何权限 我的代码如下所示: void execCommandLine() { //

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

首先,我尝试从Java运行Shell脚本,它可以很好地用于所有命令 像
pwd
cd
netstat
。移动文件,复制文件

然后我在Android应用程序中尝试了它,我得到了
cd
pwd
netstat
的输出,以及脚本中的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
只有
cp
mv
命令未显示预期结果。 请给我一些指导


我正在尝试的第一件事就是在Emulator中测试它。在/system/bin中有mv commond,我也尝试过使用busybox,但没有得到预期的结果。对于root权限如何继续..给出一些继续的想法。

一些关于可能发生在你身上的事情的提示。 你有手机吗?在/system/bin中是否有命令mv和cp? 最后,如果您的手机有busybox,您可以尝试使用它。
也许你应该先请求root权限才能这样做…

mv
cp
都给我的安卓shell带来了麻烦。许多其他人使用
cat x>y
或类似产品,效果不错。

Sweeney已经为您提供了解决方案,但这里有一个解释

Android不是GNULinux,因此默认情况下,
cp
mv
是完全不同的。在Android上,它们只管理硬链接,因此,例如,如果您试图跨分区移动文件,它将使您的数据消失,因为它不会在分区之间移动数据,只会调整硬链接。
如果您无法更改脚本,则必须使用busybox,或创建
cp
mv
脚本,即
cat文件>其他文件
和mv
rm文件
,但最好更改脚本,因为这样可以将它们移植到没有您的黑客的系统上。

我使用的解决方案是一个符号链接。例如,如果in/system/bin中没有cp、grep或mv命令等命令,那么busybox中肯定存在这些命令。 为此,我只需使用命令(来自终端仿真器)将/system重新装载为RW,然后创建符号链接

苏
安装-o rw,重新安装/系统
cd/system/bin

ln-s busybox cp#cp或其他命令

你为什么发布一个新问题而不是编辑前一个问题?@anshu你找到了上述问题的解决方案了吗?如果是,请告诉我解决方案。你能通过
adb shell运行这个吗
?小细节,但
ls-all
重复使用了-lf,这是我正在尝试的第一件事,并将其测试到Emulator中。在/system/bin中有mv commond,我也尝试过使用busybox,但没有得到预期的结果。对于根权限如何继续..给出一些继续的想法。很好的解决方案,+1。如果你感兴趣的话,我会解释一下你的烦恼。