私は現在ネイティブに電話をかけようとしています私のアプリケーションのホームディレクトリにある私のAndroidプロジェクトからシェルで実行可能ファイル。ただし、ADBを使用しているときにコマンドラインからファイルに実行可能ファイルのアクセス許可が与えられていないことがわかります。私は次のことを試みました。
File file = new File(myFileLocation);
if(file.exists()){
boolean executable = file.setExecutable(true);
}
"executable"は偽のままです。
私も次のように試しました:
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ライブラリを使おうとしていますし、オリジナルのソース/ JNIコードと同様にコンパイルされたarmeabiモジュールがあります。
回答:
回答№1は0Androidのchmodは理解できないと思います u+x
構文は、のような数値表記を使ってみてください 744
.
回答№2の場合は0
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");
}