我想使用 Process.start() 在 NDK 上运行 tcpdump 并希望将此输出捕获到缓冲区。任何人都可以告诉我如何做到这一点吗?该进程也是在与 JNI 相同的 Dalvik Vm 中创建的调用还是在不同的虚拟机中?
最佳答案
运行 native 进程实际上并不支持 ndk 的使用,但您不会是第一个这样做的人。
另请注意,tcpdump 可能需要以 root 或 setuid root 身份运行才能发挥作用。您是否有针对 Android 正确编译和链接的 tcpdump 版本?
我认为你实际上想要 android.os.Exec.createSubprocess ,它是嗯,不是公共(public)的,而不是 Process.start 。正确的方法是使用反射来实现此目的,而错误的方法是将 Exec.java(具有 native 方法的声明)复制到项目中。您可以使用管道来恢复结果,也可以通过 shell 启动它并将输出重定向到您从 java 读取的文件。
请参阅带有本地 shell 选项的 Android 终端模拟器的源代码,了解如何执行此操作的示例。
(实际上,我应该重申这一点 - 正确的方法是在您自己的 jni 库中复制非公共(public) Exec 方法的 native 功能,这样您就不会受到该非公共(public)部分的更改的影响平台)。
关于Android NDK 运行 native 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3757849/