运行 native 进程的 Android NDK

原文 标签 android android-ndk

我想使用 Process.start() 在 NDK 上运行 tcpdump 并想将此输出捕获到缓冲区中。有人可以告诉我如何做到这一点吗?此外,该进程是否在与 JNI 调用相同的 Dalvik Vm 中创建,或者是它在不同的虚拟机中?

最佳答案

运行 native 进程并不是真正支持使用 ndk,但您不会是第一个这样做的人。

另请注意,tcpdump 可能需要以 root 或 setuid root 身份运行才能有用。而且您确实有一个为 android 适当编译和链接的 tcpdump 版本?

我认为您实际上想要的是 android.os.Exec.createSubprocess,嗯,不是公开的,而不是 Process.start。有一种使用反射的正确方法,一种错误的方法是将 Exec.java(它具有本地方法的声明)复制到您的项目中。您可以使用管道来恢复结果,或者您可以通过 shell 启动它并将输出重定向到您从 java.util 读取的文件。

有关如何执行此操作的示例,请参阅带有本地 shell 选项的 android 终端仿真器的源代码。

(实际上,我应该重申这一点——正确的做法是在您自己的 jni lib 中复制非公共(public) Exec 方法的 native 功能,这样您就不会受到平台非公共(public)部分的更改的影响) .

关于运行 native 进程的 Android NDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3757849/

相关文章:

Android 加速度计采样率随机尖峰

android eclipse jedisct1/libsodium 从哪里开始

android - 项目使用 ndk-build 而不是 Android Studio 构建

java - 如何在Android中将PictureDrawable保存为JPEG/PNG文件

android - 删除图像时如何刷新 Recyclerview?

android - android ANativeWindow_lock api不适用于GLSurfaceView

android - System.loadLibrary(...) 在我的情况下找不到 native 库

android - 如何延迟从列表中将 View 添加到布局中

javascript - 虚拟键盘处于 Activity 状态时的屏幕样式

javascript - 当Animated.View将Animated.ScrollView作为子级时,PanResponder在Android上无法正常工作