Я копирую двоичный исполняемый файл в папку 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+? Работает ли он в другом каталоге? Спасибо за вашу помощь.