【发布时间】:2020-02-24 16:11:46
【问题描述】:
我在/data/local/tmp 的设备上有本机可执行文件,并使用 java api 运行 exe java.runtime.exec() 方法。但是,我收到权限被拒绝错误:13(下面附加了堆栈跟踪。)
String runexec= "/data/local/tmp/test";
Process p = Runtime.getRuntime().exec(runexec);
Java.io.IOException: Cannot run program "/data/local/tmp/test": error=13, Permission denied
W/System.err: at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
W/System.err: at java.lang.Runtime.exec(Runtime.java:692)
W/System.err: at java.lang.Runtime.exec(Runtime.java:525)
W/System.err: at java.lang.Runtime.exec(Runtime.java:422)
W/System.err: at android.view.View.performClick(View.java:6891)
W/System.err: at android.widget.TextView.performClick(TextView.java:12651)
W/System.err: at android.view.View$PerformClick.run(View.java:26083)
W/System.err: at android.os.Handler.handleCallback(Handler.java:789)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:98)
W/System.err: at android.os.Looper.loop(Looper.java:164)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6938)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
W/System.err: Caused by: java.io.IOException: error=13, Permission denied
W/System.err: at java.lang.UNIXProcess.forkAndExec(Native Method)
W/System.err: at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
W/System.err: at java.lang.ProcessImpl.start(ProcessImpl.java:128)
W/System.err: at java.lang.ProcessBuilder.start(Pro
编辑:test exe 具有a+x or say 777 权限,并通过 adb shell 正常运行,但是在使用 java 调用时失败。
【问题讨论】:
-
您可能拥有
test的权限,但您是否拥有路径的其他所有部分的权限? -
是的,我已经验证了文件夹和文件的权限。使用
su -c ...调用的测试工作 -
验证 data、local 和 tmp 是目录,并且 test 实际上是一个 exe(而不是目录或某些不可执行的数据文件)。
-
是的,我可以列出文件但不能执行。
-
您使用的是什么操作系统?我认为现在很清楚,根本问题与操作系统相关,而不是 Java。这听起来会很奇怪,就像一个用 noexec 挂载的文件系统。我在这里很快就超出了我的深度,所以我建议尝试 unix.stackexchange.com。我假设您使用
su时使用的是root?
标签: java android android-permissions