私は、低レベルのAndroidプログラミング(CodeSourceryツールチェーンを使用しているネイティブC/C++)の暗い海でダイビングしてきました。私はエミュレータで実行可能ファイルを試してみました。私は実際のデバイスでそれを試してみたいです。そこで、私は自分のネクサスを接続し、ファイルシステムにファイルをプッシュしました。次にバイナリを実行しようとしましたが、パーミッションエラーが発生しました。私はそれをマウントする方法や、どこに送るのかは関係ありません。私はルートではなく、実行させません。ルートのない電話でこれを実行する方法はありますか?根付いていないAndroid端末でネイティブアームバイナリを実行することはできますか?
答えて
Android NDKに含まれているツールチェーンを使用してバイナリをコンパイルした後、標準のAndroidアプリでパッケージ化してサブプロセスとして起動することができます。
アプリケーションのassetsフォルダにすべての必要なファイルを含める必要があります。それらを実行するためには、プログラムを持っている必要がありますように資産フォルダから実行可能な場所にコピーします。
:あなたはそうのようなこれを行うことができます/data/data/com.yourdomain.yourapp/nativeFolderprivate static void copyFile(String assetPath, String localPath, Context context) {
try {
InputStream in = context.getAssets().open(assetPath);
FileOutputStream out = new FileOutputStream(localPath);
int read;
byte[] buffer = new byte[4096];
while ((read = in.read(buffer)) > 0) {
out.write(buffer, 0, read);
}
out.close();
in.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
assetPathは絶対的なものではなく、assets /に対してです。
IE:「資産/ nativeFolderは」ただで「nativeFolder」
、あなたはこのような何かを行うことができ、アプリケーションを実行し、その出力を読み込むには:
Process nativeApp = Runtime.getRuntime().exec("/data/data/com.yourdomain.yourapp/nativeFolder/application");
BufferedReader reader = new BufferedReader(new InputStreamReader(nativeApp.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
// Waits for the command to finish.
nativeApp.waitFor();
String nativeOutput = output.toString();
ありがとう!これは完全に機能しました! – AnimatedRNG
お寄せいただきありがとうございます。 GoogleがNDKの非JNI側を少し使いやすくするのが大好きです。 – sarwar
これはおかげで、私の人生はずっと楽になりました! –
- 1. 根付いていないAndroidでアプリケーションを実行する
- 2. 根っこのAndroid端末で「adb root」を実行できません
- 3. Android端末からa.outファイルを実行することはできません
- 4. Rubymineで端末/コマンドプロンプトを実行することはできますか?
- 5. Vm virtualbox ubuntu、端末から.cファイルを実行できない
- 6. コンパイル済みのJavaアプリケーションをAndroid端末で実行していますか?
- 7. 端末でpythonを実行し、端末が閉じたときに終了しないでください
- 8. Android端末でnode.jsを実行できませんか?
- 9. 実際のAndroid端末にAPKファイルをインストールできない/
- 10. npm startを実行しているときに端末で何を表示していますか?
- 11. pythonのようなコマンドが端末で実行されているときのウィンドウとは何ですか?
- 12. 端末からJavaクラスを実行しています
- 13. AWS EC2の端末からAndroidエミュレータを実行しています
- 14. Jsonを渡す端末からPythonスクリプトを実行しているとき
- 15. androidTest.apkをAndroid搭載端末にインストールして実行できますか?
- 16. 異なるAndroid搭載端末でFBクライアントを実行するにはどうすればよいですか?
- 17. 私のAndroid端末を根絶することなく、プログラムでホーム画面のスクリーンショットを撮ることはできますか?
- 18. IDLEで実行中の端末ではないPythonスクリプト
- 19. 端末からAndroid搭載端末にionic appをインストールするにはどうすればいいですか?
- 20. Xcode Swift macOS、端末アプリケーションがNSURLSessionを実行していない
- 21. デスクトップのAIRアプリをAndroid搭載端末で実行できますか?
- 22. Androidスタジオ3に移行した後、Android 7.1未満の端末でアプリを実行できない
- 23. 根っこのAndroid搭載端末を搭載したFlashプラグイン
- 24. 端末で「source〜/ .profile」を実行するまでRVMが認識されない
- 25. 端末内でコマンドを実行して端末を使用する方法は?
- 26. Android端末でChromeのデベロッパーツールコンソールを開くことはできますか?
- 27. Androidカーネルは根絶することなくfanotifyを実行しますか?
- 28. 他の限定されていないサービス/端末でGASを実行していますか?
- 29. 自分のPC端末を使ってAndroid端末でCプログラムをコンパイルして実行するには?
- 30. 端末で実行しているときにpython printlnが実行されます
あなたはほぼ確実にルートが必要になります。あなたの携帯電話が根ざされていない場合、どのようにあなたはそれを電話で入手しましたか? – Falmarri
バイナリはどこに置いたのですか? "noexec"オプションでマウントされているため、sdcardに置くことはできません(rooted以外の場合)。 –
正確には、それがsdcardで動作しなかった理由です。私は/ dataに置くことができました(しかし、それは実行されません、あるいは私にchmodをさせてしまいます)。実行可能ファイルをファイルシステムにどのように置くかについては、 "adb push"。 – AnimatedRNG