短い: Javaからプロセスを呼び出し、その出力をJNI経由で呼び出されたC++関数によって消費させる最良の方法は何ですか?
Long : Android 用のログ リーダー アプリケーションを試しています。そのためには、logcat
コマンドを実行してその出力を解析する必要があります。私はJavaからこれを試みましたが、実行されるメモリ割り当ての量は、プロセスを完全に遅くするだけでなく、多くのGC関連のエントリでまったく同じログを乱雑にします。
そのため、構文解析に関連するすべての操作をC++で実装しました。ただし、通常のイディオムを使用してC++側からfork/exec
呼び出すことはできません。これは、 NDKで実際にサポートされていないためです。代わりに、Javaからプロセスを開始し、その出力にC++コードがアクセスできるようにする必要があります。これにはパイプを使用するのが理想的ですが、のメソッドはAndroidでも使用できません。logcat
redirectOutput
ProcessBuilder
私がこれまでに思いついた最善の解決策は、( を使用してlogcat > tempfile
)出力を一時ファイルにリダイレクトするプロセスを開始し、そのファイルからC++コードを読み取ることです。ただし、これは理想とはほど遠いものです。ネイティブコードがJavaから開始されたプロセスの出力にアクセスするより良い方法はありますか?