Android NDK 运行 native 进程

标签 android android-ndk

我想使用 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/

相关文章:

android - 从网站抓取 XML 文件数据

gcc - 安卓 NDK : how to let gcc to use additional include directories

android - 您的 APP_BUILD_SCRIPT 指向一个未知文件 : ./jni/Android.mk

android - flutter 意外退出

android - 如何为 Android 编译 C++14 代码?

android - 如何在不使用 textview 的情况下从 Hashmap 获取一个值到 Intent ?

android - 是否可以使用 Android SDK 或 NDK 禁用无线网络?

android - 需要在 Android Studio 中手动输入 keystore 详细信息,即使它们存在于 build.gradle 中

Android NDK Eclipse CDT 不允许我使用字符串的 substr 方法

android - ndk-build DUMP_APP_ABI 在 Windows 上返回 2 行