【手把手教程JNA_demo所有步骤】
1.生成JAVA层使用的库
jna-5.14.0.jar
android-x86-64.jar
这两个是必选项,因为是个封装好了的中间库,直接到官网下载即可(外网,pa下载快)
https://github.com/java-native-access/jna/releases
2.需要使用的资源
我前期写demo的时候参考了以下网友的例子,我觉得并不完美,自取斟酌
2.1在Android中使用JNA 例子
比较老,但是代码截图是没有问题的
2.2 github上的jna例子
完整,但是要移植到自己的环境中比较麻烦
GitHub - dragonforgithub/JnaDemo
其中作者对自己的源码的博文在此,挺细的
https://www.cnblogs.com/blogs-of-lxl/p/11013139.html
3.demo的环境
androidstudio17.0.9
JDK1.8
gradle 6.7.1
jna-5.14.0.jar
android-x86-64.jar
4.demo实践开始的步骤
4.1 数据类型
java-C++(从java层往下C++传的时候:java-byte[] 对应 C++-int8_t* )
4.2创建工程,生成 安卓.so库
4.2.1 创建Native C++安卓工程
4.2.2 导入自己的C++源文件,并在cmakelist上构建将你的源文件编译成动态库
androidstudio build成功的时候会有生成路径的提示,没有的话,自己找,每个androidstudio不太一样
4.3创建工程,jna 使用上面步骤生成的so库
4.3.1创建empty activity安卓工程
如果这个工程不可用,就创建empty views activity
4.3.2导入两个jar包
根据图上路径放包
jna.jar包不需要解压
x86_64是android-x86-64.jar包解压号的文件夹,自己下载对应平台包解压后放在这个路径下,但是要记得文件夹是否要修改成对应名字(安卓工程会按路径去读对应平台的包)
要添加依赖项,以及Libs路径
4.3.3 编写java层调用C++层方法
调用代码:
JNATest.INSTANCE.myFunction(datatest,testValue);
public interface JNATest extends Library { NativeLibrary library = NativeLibrary.getInstance("wxxxx"); JNATest INSTANCE = (JNATest) Native.load(library.getName(), JNATest.class); public void myFunction(byte[] data,int test); public void myFreeTest(); }
最后点击调试,就可以看到自己加的日志啦
【不好意思,麻烦你关注我啦,争取早日做个有用干货文主】