/ / "Runtime.getRuntime()。exec(..)"を使用して実行するようにAndroidのファイルの実行権限を設定する方法 - android、android-ndk、jni

"Runtime.getRuntime()。exec(..)"を使って実行するためのAndroid上のファイルに対する実行権限を設定する方法 - android、android-ndk、jni

私は現在ネイティブに電話をかけようとしています私のアプリケーションのホームディレクトリにある私の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は0

Androidの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");
}