首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Traceroute C文件创建JNI接口

如何为Traceroute C文件创建JNI接口
EN

Stack Overflow用户
提问于 2019-05-27 21:36:03
回答 1查看 70关注 0票数 0

我在Android应用程序上工作,这是一个网络实用程序。其中一个实用程序是使用活动和xml文件的traceroute实现。在java中实现traceroute是一种痛苦,所以我研究了JNI和C代码。有一个叫做busybox的实用程序包含了许多linux工具。它是开源的,并且有traceroute。这是github的代码,我的问题是如何在https://raw.githubusercontent.com/mirror/busybox/master/networking/traceroute.c中实现这个文件的JNI接口。one编译的文件充当命令行工具,您可以运行该工具并传递要跟踪的主机的参数。这是否意味着我只需要在JNI中实现main方法。另外,这个文件没有JNI类型的方法,所以我不能直接与它交互。我是否需要创建另一个使用JNI C代码调用traceroute main方法的C文件。感谢您的任何意见

EN

回答 1

Stack Overflow用户

发布于 2019-05-27 23:08:34

您希望调用此方法:common_traceroute_main(int op, char **argv)

您必须使用github中的代码创建共享库。请看这里

http://jnicookbook.owsiak.org/recipe-No-001/

一旦有了库,就必须在Java语言中准备参数,并将它们传递给JNI代码,在JNI代码中,您需要将它们解压并转换为common_traceroute_main所期望的格式。

例如。您可以传递String的数组并将其转换为char **argv

http://jnicookbook.owsiak.org/recipe-No-009/

然后,您所要做的就是从JNI包装器中调用common_traceroute_main

解决方案草案

您将需要Java代码,例如,如下所示

代码语言:javascript
复制
public class TraceCaller {
  public static native callTraceRoute(int op, String[] args);
}

一旦你使用javac -h headers TraceCaller编译它,你会发现C头文件。

在这个头文件中,您必须从字符串数组中提取值。看一下这里(https://github.com/mkowsiak/jnicookbook/blob/master/recipes/recipeNo038/java/recipeNo038/PassHashMap.java),了解如何在JNI代码中从数组中检索String对象并将其转换为char*

一旦(在JNI内部)拥有了:int opchar *数组,就可以简单地调用char *common_traceroute_main

一旦完成,您必须回传数据(作为返回值或通过传递给JNI的对象)。

看看这里的示例,它展示了如何将String传递回Java:

https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo010

然后,您就完成了:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56327158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档