我知道这似乎很奇怪,但是,现在我有一个.SO(C中的共享对象),必须在我的Android项目中使用。
现在,我的要求是直接在Java中调用.SO中的函数,以为.SO中的标头创建JNI包装器。
我的问题是我假设流程是什么,
1。创建JNI本机方法->然后创建头文件,然后->从头文件创建这些方法的实现,将.SO中的.h文件包含在本地实现中,并调用.SO中存在的方法>
或
或
如果我缺少某些东西,请纠正我。
我在同一网站上提到了一些在线内容,我可以说以下所有这些示例与我所需要的完全不同。
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
答案 0 :(得分:1)
通常,您有:
lib.so
-黑匣子lib.h
-库头文件公开了一些lib.so方法。这些是您可以使用的方法。jni.cpp
和jni.h
文件-此代码是Java和lib端之间的桥梁。在这里,您导入lib.h
头文件。这样,您会收到来自Java端的调用,与lib.so
方法进行通信并将结果发送回Java端。最后,您必须具有一个JNI代码,该代码将负责与Java和lib端进行通信。该实现可以是非常基本的,例如调用lib方法并返回结果,也可以更复杂,例如启动线程,等待结果,然后在完成后返回报告,例如使用更复杂的类等。
在任何情况下,您的JNI代码(无论是单个方法还是更复杂的类)都必须包含lib.h
头文件,以便能够调用lib.so
方法。