Android基于JNA集成调用第三方C/C++的so库

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

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/130401657