【发布时间】:2014-02-18 16:50:05
【问题描述】:
我需要为文件及其文件夹设置权限。两者都在内部存储的 /data/ 文件夹中。我的应用程序可以做到这一点的唯一方法是:
String[] cmd = { "su", "-c", "chmod 777 " + myakDB.getParentFile().getPath()};
Process process = Runtime.getRuntime().exec(cmd);
process.waitFor();
cmd = new String[] { "su", "-c", "chmod 666 " + myakDB.getPath() };
process = Runtime.getRuntime().exec(cmd);
process.waitFor();
因此它两次向超级用户请求许可。我猜这对我的应用程序的用户来说是不受欢迎的行为。所以通过互联网搜索同样的问题给了我以下解决方案(使用流):
Process process = Runtime.getRuntime().exec("su");
DataOutputStream out = new DataOutputStream(process.getOutputStream());
out.writeBytes("chmod 777 " + myakDB.getParentFile().getPath());
out.writeBytes("chmod 666 " + myakDB.getPath());
out.writeBytes("exit\n");
out.flush();
但它不起作用。有时什么也没发生,有时它会触发超级用户查询,然后挂断白屏。那么我的流程有什么问题?
【问题讨论】:
-
您似乎缺少一个换行符或分号来结束第一个和第二个命令。另外,请不要让可执行的东西在世界范围内可写 - 777 几乎总是一个坏主意。
-
阅读(并实施)所有 When Runtime.exec() won't 的建议。那可能会解决问题。如果没有,它应该提供更多关于失败原因的信息。然后忽略它引用
exec并使用ProcessBuilder构建Process。还要将String arg分解为String[] args以说明本身包含空格的参数。 -
>>> 不要让可执行的东西世界可写 - 777 如果文件没有 777 权限,我无法写入文件。我认为这是错误的方式吗?
标签: android shell runtime.exec root