繁体   English   中英

使用JNI从Java类调用.SO函数

[英]Calling .SO functions from a java Class using JNI

我知道这似乎很奇怪,但是,现在我有一个.SO(C中的共享对象),并且必须在我的Android项目中使用。

现在,我的要求是直接在Java中调用.SO中的函数,以为.SO中的标头创建JNI包装器。

我的问题是我假设流程是什么,

1.创建JNI本机方法->然后创建头文件,然后->从头文件创建这些方法的实现,将.SO中的.h文件包含在本地实现中,并调用.SO中存在的方法

要么

  1. 直接为.SO中存在的头文件创建JNI本机方法,该头文件将直接调用C方法。

要么

  1. 我们还有其他方法吗?

如果我缺少某些东西,请纠正我。

我在同一篇文章中提到了一些在线内容,我可以说以下所有这些示例与我所需要的完全不同。

https://www.codepool.biz/package-jni-shared-library-jar-file.html

https://www.codepool.biz/build-so-aar-android-studio.html

https://dzone.com/articles/generating-executable-jar-file

https://www.ibm.com/developerworks/java/tutorials/j-jni/j-jni.html

如何从Android使用C lib(.so)?

通常,您有:

  • lib.so黑匣子
  • lib.h库头文件公开了一些lib.so方法。 这些是您可以使用的方法。
  • jni.cppjni.h文件-此代码是Java和lib端之间的桥梁。 在这里,导入lib.h头文件。 这样,您会收到来自Java端的调用,并与lib.so方法进行通信并将结果发送回Java端。

最后,您必须具有一个JNI代码,该代码将负责与Java和lib端进行通信。 该实现可以是非常基本的,例如调用lib方法并返回结果,也可以更复杂,例如启动线程,等待结果,然后报告完成时的报告等,并使用更复杂的类等。

无论如何,您的JNI代码(是单个方法还是更复杂的类)必须包含lib.h头文件,以便能够调用lib.so方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM