我将二进制可执行文件复制到路径context.getFilesDir()
的位置/data/data/my.app.package/files/my-executable
。
/data/data/my.app.package/files/my-executable
的文件许可为-rwxr-xr-x
然后,我尝试使用Java ProcessBuilder
执行命令,例如:
commands = Arrays.asList("/data/data/my.app.package/files/my-executable", "ls");
ProcessBuilder pb = new ProcessBuilder(commands);
pb.redirectErrorStream(true);
final Process p = pb.start();
语句pb.start()
引发以下IOException:
Caused by java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(UNIXProcess.java)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
at java.lang.ProcessImpl.start(ProcessImpl.java:141)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
Cannot run program "/data/data/my.app.package/files/my-executable": error=13, Permission denied
我在测试电话上没有root访问权限。在Android版本9(API 28)之前,它可以正常工作。从Android 10(API 29)开始,我得到了上面的IOException。
如何在Android 10+中运行可执行文件?它可以在另一个目录中工作吗?感谢您的帮助。
答案 0 :(得分:0)
我通过在“ build.gradle(Module:app)”中将“ android.defaultConfig.targetSdkVersion”的值从“ 29”更改为“ 28”来解决。