Android基于JNA集成调用第三方C/C++的so库
(1)引入JNA。
基于JNA开源项目,JNA对Android NDK的封装,简化Android层JNI集成调用C/C++的so库。
GitHub - java-native-access/jna: Java Native AccessJava Native Access. Contribute to java-native-access/jna development by creating an account on GitHub.https://github.com/java-native-access/jna
在Android的app的build.gradle添加引用:
implementation group: 'net.java.dev.jna', name: 'jna', version: '5.13.0'
这里可以直接添加JNA最新版本:
https://mvnrepository.com/artifact/net.java.dev.jna/jnahttps://mvnrepository.com/artifact/net.java.dev.jna/jna
在app的build.gradle的android块内设置jniLibs.srcDir:
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
(2)在 jna/dist at master · java-native-access/jna · GitHub 这里下载 android-aarch64.jar
因为我这里基于arm64-v8a架构。如果是armv7,选择相应的jar包。
下载后,解压android-aarch64.jar,里面是libjnidispatch.so文件,把这个文件放入app\libs\arm64-v8a下面
(3)以上准备工作完成后,开始集成第三方so库。
把第三方so库放入app\libs\arm64-v8a下
(4)开始调用第三方so库中的C/C++函数。写上层Java代码。
注意Native.load()里面对应的so库名,so库名一般以libxxx.so开头,但是在Native.load里面,不要带上lib和结尾的.so后缀名,即去掉开头lib和结尾的.so。
在CLibrary里面定义的接口函数,即为libxxx.so第三方库里面完成的函数。
(5)在Android层直接使用:
Android基于JNA加载第三方.so库报错:java.lang.UnsatisfiedLinkError Native library (com/sun/jna/android-aarch64/l_zhangphil的博客-CSDN博客基于Windows平台,Android NDK(JNI)开发技术》【摘要】本文介绍如何基于Windows平台,在Eclipse中使用Android NDK技术实现“Android平台上的JNI ( Java Native Interface ) ”开发。新增的getStringCpp()是新增的一个方法,因为没有实现所以报红。解压后,里面是一个libjnidispatch.so,把libjnidispatch.so放到Android项目的libs\arm64-v8a\里面即可。https://blog.csdn.net/zhangphil/article/details/130400296