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

时间:2019-03-20 14:37:41

标签: java android java-native-interface .so

我知道这似乎很奇怪,但是,现在我有一个.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

How to use c lib(.so) from android?

1 个答案:

答案 0 :(得分:1)

通常,您有:

  • 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方法。