【问题标题】:Cannot run program "/data/data/my.app.package/files/my-executable": error=13, Permission denied无法运行程序“/data/data/my.app.package/files/my-executable”:错误=13,权限被拒绝
【发布时间】:2019-10-20 23:12:32
【问题描述】:

我将二进制可执行文件复制到位置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+ 中运行我的可执行文件?它在另一个目录中工作吗?感谢您的帮助。

【问题讨论】:

  • 有什么解决办法吗?同样的问题
  • 好像没有解决办法。从 API 29 开始,无法再运行提供的二进制文件... :-(
  • 嗨...你找到解决方案了吗

标签: android processbuilder permission-denied


【解决方案1】:

我通过在 'build.gradle(Module: app)' 中将 'android.defaultConfig.targetSdkVersion' 的值从 '29' 更改为 '28' 来解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多