概述
目录
- 概述
- 调用JNI接口的方法
- 后记
概述
Android调用JNI库大致包括两种情况:
- 提供Java接口和so库:
这种类型的调用比较简单,要做的只是把so库放到APK或者Android系统中,之后在使用的时候调用对应的Java接口就行。JNI部分的代码提供商都写好了。 - 只提供C/C++接口和so库:
由于提供的算法库中并没有JNI部分的代码,所以我们需要自己写JNI代码,并在native方法中调用算法提供的接口。最终会产生两个so库,一个包含我们的native代码,另一个就是算法库。
本文主要对第一种调用情况进行实现,第二种调用情况涉及JNI具体代码的编写,目前未深入了解,想要了解第二种调用情况实现方式的伙伴可以参考博文:https://blog.csdn.net/EricFantastic/article/details/49300131
调用JNI接口的方法
- 在
app -> build.gradle
文件中的android -> defaultConfig
下增加代码:
ndk.abiFilters 'arm64-v8a'
- 在
app -> build.gradle
文件中的buildscript -> dependencies
下增加代码:
classpath 'com.nabilhachicha:android-native-dependencies:0.1.2'
- 在
app -> build.gradle
文件中增加代码:
apply plugin: 'android'
apply plugin: 'android-native-dependencies'
- 在
app -> build.gradle
文件中增加代码:
native_dependencies {
artifact '.so fileName //下面语句为具体示例'
artifact 'com.snappydb:snappydb-native:0.2.+:x86'
}
- 在代码中用于表征JNI的类中增加加载库的代码:
static {
System.loadLibrary(".soFileName");
}
- 在上述类中声明JNI方法:
public native int init(int a, int b);
- 大功告成,之后就可以直接调用JNI方法了。
后记
- 本文使用了android-native-dependencies,这是一个能够自动查找并下载JNILib库依赖到Android工程jniLibs目录的Android插件,感兴趣的伙伴可以自行了解。
- jniLibs目录与libs目录的区别:主要是放的东西不同,.so库默认放在jniLibs目录下,.jar、.aar文件则放在libs目录下,如果将.so库放在libs里面,则需要进行重定向(告诉AndroidStudio该so文件在哪里),重定向语句:
sourceSets{
main{
jniLibs.srcDirs = [‘libs’]
}
}
- 上述代码
ndk.abiFilters 'arm64-v8a'
的含义可以参考文章:https://blog.csdn.net/xfb1989/article/details/111353782
最后
以上就是唠叨百合为你收集整理的Android调用JNI的实现方法概述调用JNI接口的方法后记的全部内容,希望文章能够帮你解决Android调用JNI的实现方法概述调用JNI接口的方法后记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复