我目前正尝试从我的应用程序主目录中的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代码。没有编译问题,这看起来像文件权限问题比什么都重要。
答案 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
等数字表示法。