我是靠谱客的博主 唠叨百合,最近开发中收集的这篇文章主要介绍Android调用JNI的实现方法概述调用JNI接口的方法后记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 概述
  • 调用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

最后

以上就是唠叨百合为你收集整理的Android调用JNI的实现方法概述调用JNI接口的方法后记的全部内容,希望文章能够帮你解决Android调用JNI的实现方法概述调用JNI接口的方法后记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部