如何在Android中的文件上设置可执行权限以使用“Runtime.getRuntime()。exec(..)”执行

时间:2014-04-01 14:43:55

标签: android android-ndk java-native-interface

我目前正尝试从我的应用程序主目录中的Android项目本机调用shell上的可执行文件。但是,在使用ADB时,我可以通过命令行看到我的文件没有获得可执行文件权限。我尝试过以下方法:

File file = new File(myFileLocation);
if(file.exists()){
boolean executable = file.setExecutable(true);
}

'可执行'仍然是假的。

我还尝试过以下方法:

Process processChmod = Runtime.getRuntime().exec("/system/bin/chmod u+x " + myExecutableLocation);
processChmod.waitFor();

当我尝试在进程上发出命令时,我得到以下IOException:

  

java.io.IOException:权限被拒绝java.io.IOException:错误   运行exec()。命令:[/ storage / emulated / 0 / myApp / iperf,-c,   iperf.eltel.net]工作目录:null环境:null

我试图发出的命令是:

Runtime.getRuntime().exec("/storage/emulated/0/myApp/iperf -c iperf.eltel.net")

同样,在这个阶段,我可以看到我希望使用的进程的文件权限只是r / w而不是可执行文件。任何帮助赞赏!顺便说一下,我试图使用“iPerf”。 C库和编译的armeabi模块以及原始源/ JNI代码。没有编译问题,这看起来像文件权限问题比什么都重要。

2 个答案:

答案 0 :(得分:1)

位于SD卡上的文件不可执行。将文件移动到内部存储(例如,移至/ data / local,或者,如果您获得权限被拒绝,则移至data / local / tmp)。

我就这样做了:

String filePath = getFilesDir().getAbsolutePath() + File.separator + "myFileName";
File myFile = new File(filePath);
if (!myFile.canExecute()) {
    Log.d("File is not executable, trying to make it executable ...");
    if (myFile .setExecutable(true)) {
        Log.d("File is executable");
    } else {
        Log.d("Failed to make the File executable");
    }
} else {
    Log.d("File is executable");
}

答案 1 :(得分:0)

我认为Android的chmod不理解u+x语法,请尝试使用744等数字表示法。