急问android应用程序如何执行shell脚本命令 String command = "chmod 777 " + path; Runtime runtime = Runtime.getRuntime(); runtime.exec(command); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在manifest文件里添加过权限设置了 应该不是这个问题。还是谢谢了 继续求人来解答啊~~~ 这是linux的权限,不是android manifest的权限。你需要确认普通linux user(android app)能执行你的xxx.sh并且能执行你脚本里的命令。 这是方法,添加到你的应用程序中即可,比较简陋,呵呵!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(); } } 先要确认 你在脚本是否能正常在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; } 你这个代码里哪里执行了shell脚本呢?cmd还是直接命令执行啊,我需要的是执行shell脚本,还没解决,继续求 我的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"); 我的做法和楼下几位说的差不多,但是最终还是调用不成功,继续求问是什么问题 “我的shell脚本里的命令在adb窗口里可以顺利执行。”你是root执行的?你先确定你的sh脚本执行了吗?还是sh脚本里的命令没成功?exec("/system/bin/xxxxx.sh");不是就可以 我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个button,点击事件就是调用这个方法,这个方法的功能就是指向shell命令,意思就是你可以将你的*.sh文件里的命令一条条的通过该方面执行比如:execShell("cd /");execShell("busybox touch xxx.txt");那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此! 你如果能确定,在手动执行*.sh是可执行的,那么execShell(“./xxx.sh”);也是可以的 我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个button,点击事件就是调用这个方法,这个方法的功能就是指向shell命令,意思就是你可以将你的*.sh文件里的命令一条条的通过该方面执行比如:execShell("cd /");execShell("busybox touch xxx.txt");那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!我想执行类似这样的代码:Process p = Runtime.getRuntime().exec("chmod data/data/com.XXX.XXX"); 改变文件的权限,但是这样改变不了。 我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个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.XXX2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改init.xxx.rc文件,使他不会随着重启而改变 我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个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.XXX2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改init.xxx.rc文件,使他不会随着重启而改变在CMD里面用chmod data/data/com.XXX.XXX就可以改权限啊,用你说的busybox chmod 777 /data/data/com.XXX.XXX不可以改啊。 我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个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.XXX2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改init.xxx.rc文件,使他不会随着重启而改变在CMD里面用chmod data/data/com.XXX.XXX就可以改权限啊,用你说的busybox chmod 777 /data/data/com.XXX.XXX不可以改啊。chmod ??? com.XXX.XXX ------>???表示的是权限 我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个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.XXX2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改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不可以改啊。这两句在代码里执行都没有成功,前一句在命令行执行成功了,你说的那句没有执行成功! 我使用这个没有成功,我很想问一下你是怎么实现的,有具体一些的例子吗?求指教!我写的例子就是一个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.XXX2.如果在重启设备之后,权限又变回去了,那么你就要重新执行该命令,或者你在源码中修改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工具,现在不要纠结于这个问题,搞的现在忘了一开始想要解决什么问题了! 问题解决了吗?我也同样的问题,还有就是在android里调用cd /sdcard/都失败 关于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/ 我现在也出现这个问题,cmd下chmod能成功,java代码执行没抛异常,但是文件权限没改变。都没人有办法么?网上那些权限修改的方法,都是坑爹的么?有木有成功过啊 android访问webservice参数传递失败,求大神指导 调用sendTextMessage发送短信后怎么写入到短信箱? pull解析xml数据问题 android开发的神奇事情 急求书籍 哪里有android图像处理方面的讲解或源代码 BigPlanetTracks无法运行的问题 fragment中使用自定义的layout出现问题,求教各位! 报错 : java.lang.UnsupportedOperationEx android 4.4联系人添加默认铃声出问题?见log。有人处理过类似异常吗?求大侠支招。 被引用的类怎么调用引用它的activity Android中图片的问题
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();
}
}
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;
}
用android程序调用的时候,我在manifest里面设置了system权限:android:sharedUserId="android.uid.system",
shell脚本文件在adb里设置了chmod 777权限,
调用脚本的命令:Process proc=Runtime.getRuntime().exec("/system/bin/sh /system/bin/xxxxx.sh");
我的做法和楼下几位说的差不多,但是最终还是调用不成功,继续求问是什么问题
你是root执行的?
你先确定你的sh脚本执行了吗?还是sh脚本里的命令没成功?exec("/system/bin/xxxxx.sh");
不是就可以
意思就是你可以将你的*.sh文件里的命令
一条条的通过该方面执行
比如:
execShell("cd /");
execShell("busybox touch xxx.txt");
那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!
execShell(“./xxx.sh”);也是可以的
意思就是你可以将你的*.sh文件里的命令
一条条的通过该方面执行
比如:
execShell("cd /");
execShell("busybox touch xxx.txt");
那么你就会在/目录下找到一个xxx.txt文件,其他的拷贝,粘贴,查询的什么命令同样如此!我想执行类似这样的代码:
Process p = Runtime.getRuntime().exec("chmod data/data/com.XXX.XXX"); 改变文件的权限,但是这样改变不了。
意思就是你可以将你的*.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文件,使他不会随着重启而改变
意思就是你可以将你的*.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不可以改啊。
意思就是你可以将你的*.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 ------>???表示的是权限
意思就是你可以将你的*.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不可以改啊。这两句在代码里执行都没有成功,前一句在命令行执行成功了,你说的那句没有执行成功!
意思就是你可以将你的*.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工具,现在不要纠结于这个问题,搞的现在忘了一开始想要解决什么问题了!
CommandResult result = ShellUtils.execCommand(commands, true);具体可以看看这篇文章介绍 http://www.trinea.cn/android/android-java-execute-shell-commands/
我现在也出现这个问题,cmd下chmod能成功,java代码执行没抛异常,但是文件权限没改变。都没人有办法么?网上那些权限修改的方法,都是坑爹的么?有木有成功过啊