Android调用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接口的方法

  1. app -> build.gradle文件中的android -> defaultConfig下增加代码:
ndk.abiFilters 'arm64-v8a'
  1. app -> build.gradle文件中的buildscript -> dependencies下增加代码:
classpath 'com.nabilhachicha:android-native-dependencies:0.1.2'
  1. app -> build.gradle文件中增加代码:
apply plugin: 'android'
apply plugin: 'android-native-dependencies'
  1. app -> build.gradle文件中增加代码:
native_dependencies {
    artifact '.so fileName //下面语句为具体示例'
    artifact 'com.snappydb:snappydb-native:0.2.+:x86'
}
  1. 在代码中用于表征JNI的类中增加加载库的代码:
static {
	System.loadLibrary(".soFileName");
}
  1. 在上述类中声明JNI方法:
public native int init(int a, int b);
  1. 大功告成,之后就可以直接调用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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保温杯拖把风扇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值