我有一个关于安卓应用的一般性问题,我需要在我的安卓应用中使用一些pcap功能。因为据我所知,Java不提供原始数据包注入和低层编程的可能性(如果我错了,请纠正我),所以我正在寻找替代方案。到目前为止,我发现以下内容:
- ANDROID NDK
- JNETPCAP
有没有建议我应该使用哪个或者其他建议?
JNI解决方案
您需要在C或C ++中包装libpcap的调用和逻辑,并通过JNI
(Java Native Interface) 公开底层函数,使您的应用程序可以在Java中调用本地代码。
关于JNI
的文档在互联网上非常完整,有许多教程可以参考,例如这篇文章。
如果您想轻松地在JNI中包装本地代码,可以使用Swig
,它可以根据您的C / C ++本地头文件自动生成JNI代码。
获取的JNI代码应使用Android NDK作为动态库(.so)进行编译。此库应放置在您的应用程序包下的libs /
目录中。然后,您可以调用System.loadLibrary(path_to_you_dynamic_library)
来加载库中包含的所有符号并在Java中使用它们。
使用第三方库
如果您担心在使用JNI时会感到头疼,您可以查看此库,该库将为您完成繁重的工作,并提供API以在Java中操作原始套接字。