简短:从Java调用进程并将其输出由通过JNI调用的C++函数使用的最佳方法是什么。
Long:我正在试验Android的日志阅读器应用程序。为此,我必须运行logcat
命令并解析其输出。我已经从Java尝试过这个,但是执行的内存分配量不仅使过程非常缓慢,而且还会使相同的日志变得混乱,其中包含许多与GC相关的条目。
出于这个原因,我在C++中实现了所有与解析相关的操作。但是,我不能使用通常的习惯用法从C++fork/exec
端调用,因为NDK并不真正支持它。相反,我需要从Java启动该过程,并以某种方式使其输出可供C++代码访问。理想情况下,我会为此使用管道,但Android上也没有这些方法。logcat
redirectOutput
ProcessBuilder
到目前为止,我想出的最佳解决方案是启动进程,将其输出重定向到一个临时文件(使用logcat > tempfile
),并从该文件中读取C++代码。然而,这远非理想。有没有更好的方法让本机代码访问从Java开始的进程的输出?