String command = "chmod 777 " + path;
Runtime runtime = Runtime.getRuntime();
runtime.exec(command);

解决方案 »

  1.   

    我在manifest文件里添加过权限设置了 应该不是这个问题。还是谢谢了 继续求人来解答啊~~~
      

  2.   

    这是linux的权限,不是android manifest的权限。你需要确认普通linux user(android app)能执行你的xxx.sh并且能执行你脚本里的命令。
      

  3.   

     这是方法,添加到你的应用程序中即可,比较简陋,呵呵!
    public void execShell(String cmd){
         try{  
                //权限设置
                Process p = Runtime.getRuntime().exec("su");  
                //获取输出流
                OutputStream outputStream = p.getOutputStream();
                DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
                //将命令写入
                dataOutputStream.writeBytes(cmd);
                //提交命令
                dataOutputStream.flush();
                //关闭流操作
                dataOutputStream.close();
                outputStream.close();
           }  
           catch(Throwable t)  
            {  
                 t.printStackTrace();  
                } 
        }
      

  4.   

    先要确认  你在脚本是否能正常在adb.exe窗口 环境下正常执行  脚本读写权限要注意的如果能正常执行那么... oncreate(){
           test3()
    }private void test3() {
    execCommand1("system/bin/xxxx.sh");
    } public boolean execCommand1(String cmd) {
    Process process = null;
    try {
    process = Runtime.getRuntime().exec(cmd);
    process.waitFor();
    } catch (Exception e) {
    return false;
    } finally {
    try {
    process.destroy();
    } catch (Exception e) {
    }
    }
    return true;
    }
      

  5.   

    你这个代码里哪里执行了shell脚本呢?cmd还是直接命令执行啊,我需要的是执行shell脚本,还没解决,继续求
      

  6.   

    我的shell脚本里的命令在adb窗口里可以顺利执行。
    用android程序调用的时候,我在manifest里面设置了system权限:android:sharedUserId="android.uid.system",
    shell脚本文件在adb里设置了chmod 777权限,
    调用脚本的命令:Process proc=Runtime.getRuntime().exec("/system/bin/sh /system/bin/xxxxx.sh"); 
    我的做法和楼下几位说的差不多,但是最终还是调用不成功,继续求问是什么问题
      

  7.   

    “我的shell脚本里的命令在adb窗口里可以顺利执行。”
    你是root执行的?
    你先确定你的sh脚本执行了吗?还是sh脚本里的命令没成功?exec("/system/bin/xxxxx.sh");
    不是就可以
      

  8.   

    我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个button,点击事件就是调用这个方法,这个方法的功能就是指向shell命令,
    意思就是你可以将你的*.sh文件里的命令
    一条条的通过该方面执行
    比如:
    execShell("cd /");
    execShell("busybox touch xxx.txt");
    那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!
      

  9.   

    你如果能确定,在手动执行*.sh是可执行的,那么
    execShell(“./xxx.sh”);也是可以的
      

  10.   

    我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个button,点击事件就是调用这个方法,这个方法的功能就是指向shell命令,
    意思就是你可以将你的*.sh文件里的命令
    一条条的通过该方面执行
    比如:
    execShell("cd /");
    execShell("busybox touch xxx.txt");
    那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!我想执行类似这样的代码:
    Process p = Runtime.getRuntime().exec("chmod data/data/com.XXX.XXX");  改变文件的权限,但是这样改变不了。
      

  11.   

    我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个button,点击事件就是调用这个方法,这个方法的功能就是指向shell命令,
    意思就是你可以将你的*.sh文件里的命令
    一条条的通过该方面执行
    比如:
    execShell("cd /");
    execShell("busybox touch xxx.txt");
    那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!我想执行类似这样的代码:
    Process p = Runtime.getRuntime().exec("chmod data/data/com.XXX.XXX");  改变文件的权限,但是这样改变不了。1.你写的这条命令就是错的,正确写法:busybox  chmod  777  /data/data/com.XXX.XXX
    2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改init.xxx.rc文件,使他不会随着重启而改变
      

  12.   

    我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个button,点击事件就是调用这个方法,这个方法的功能就是指向shell命令,
    意思就是你可以将你的*.sh文件里的命令
    一条条的通过该方面执行
    比如:
    execShell("cd /");
    execShell("busybox touch xxx.txt");
    那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!我想执行类似这样的代码:
    Process p = Runtime.getRuntime().exec("chmod data/data/com.XXX.XXX");  改变文件的权限,但是这样改变不了。1.你写的这条命令就是错的,正确写法:busybox  chmod  777  /data/data/com.XXX.XXX
    2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改init.xxx.rc文件,使他不会随着重启而改变
    在CMD里面用chmod data/data/com.XXX.XXX就可以改权限啊,用你说的busybox  chmod  777  /data/data/com.XXX.XXX不可以改啊。
      

  13.   

    我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个button,点击事件就是调用这个方法,这个方法的功能就是指向shell命令,
    意思就是你可以将你的*.sh文件里的命令
    一条条的通过该方面执行
    比如:
    execShell("cd /");
    execShell("busybox touch xxx.txt");
    那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!我想执行类似这样的代码:
    Process p = Runtime.getRuntime().exec("chmod data/data/com.XXX.XXX");  改变文件的权限,但是这样改变不了。1.你写的这条命令就是错的,正确写法:busybox  chmod  777  /data/data/com.XXX.XXX
    2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改init.xxx.rc文件,使他不会随着重启而改变
    在CMD里面用chmod data/data/com.XXX.XXX就可以改权限啊,用你说的busybox  chmod  777  /data/data/com.XXX.XXX不可以改啊。

    chmod  ???  com.XXX.XXX    ------>???表示的是权限
      

  14.   

    我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个button,点击事件就是调用这个方法,这个方法的功能就是指向shell命令,
    意思就是你可以将你的*.sh文件里的命令
    一条条的通过该方面执行
    比如:
    execShell("cd /");
    execShell("busybox touch xxx.txt");
    那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!我想执行类似这样的代码:
    Process p = Runtime.getRuntime().exec("chmod data/data/com.XXX.XXX");  改变文件的权限,但是这样改变不了。1.你写的这条命令就是错的,正确写法:busybox  chmod  777  /data/data/com.XXX.XXX
    2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改init.xxx.rc文件,使他不会随着重启而改变
    在CMD里面用chmod data/data/com.XXX.XXX就可以改权限啊,用你说的busybox  chmod  777  /data/data/com.XXX.XXX不可以改啊。

    chmod  ???  com.XXX.XXX    ------>???表示的是权限不好意思,我刚才那个写错了,chmod 777 data/data/com.XXX.XXX就可以改权限啊,用你说的busybox  chmod  777  /data/data/com.XXX.XXX不可以改啊。这两句在代码里执行都没有成功,前一句在命令行执行成功了,你说的那句没有执行成功!
      

  15.   

    我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个button,点击事件就是调用这个方法,这个方法的功能就是指向shell命令,
    意思就是你可以将你的*.sh文件里的命令
    一条条的通过该方面执行
    比如:
    execShell("cd /");
    execShell("busybox touch xxx.txt");
    那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!我想执行类似这样的代码:
    Process p = Runtime.getRuntime().exec("chmod data/data/com.XXX.XXX");  改变文件的权限,但是这样改变不了。1.你写的这条命令就是错的,正确写法:busybox  chmod  777  /data/data/com.XXX.XXX
    2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改init.xxx.rc文件,使他不会随着重启而改变
    在CMD里面用chmod data/data/com.XXX.XXX就可以改权限啊,用你说的busybox  chmod  777  /data/data/com.XXX.XXX不可以改啊。

    chmod  ???  com.XXX.XXX    ------>???表示的是权限不好意思,我刚才那个写错了,chmod 777 data/data/com.XXX.XXX就可以改权限啊,用你说的busybox  chmod  777  /data/data/com.XXX.XXX不可以改啊。这两句在代码里执行都没有成功,前一句在命令行执行成功了,你说的那句没有执行成功!
    那应该是你的系统里面没有使用busybox工具,现在不要纠结于这个问题,搞的现在忘了一开始想要解决什么问题了!
      

  16.   

    问题解决了吗?我也同样的问题,还有就是在android里调用cd /sdcard/都失败
      

  17.   

    关于Android中利用Shell执行某些命令已封装成完善的API,可轻松实现如修改hosts,拷贝文件、安装apk及在拥有root权限下执行某些操作等,如拷贝文件如下:String[] commands = new String[] { "mount -o rw,remount /system", "cp /mnt/sdcard/xx.apk /system/app/" };
    CommandResult result = ShellUtils.execCommand(commands, true);具体可以看看这篇文章介绍 http://www.trinea.cn/android/android-java-execute-shell-commands/
      

  18.   


    我现在也出现这个问题,cmd下chmod能成功,java代码执行没抛异常,但是文件权限没改变。都没人有办法么?网上那些权限修改的方法,都是坑爹的么?有木有成功过啊