作者:Cornell和Janey的BabyPeter_580 | 来源:互联网 | 2023-09-07 19:34
1.概述
在上一篇文章中 JNI技术-入门教程 中,我们只做了简单的用Java文件生成.h的头文件。
在真正工作中,想要用自己公司的.so库,又恰巧底层使用C/C++写的,那恭喜你,你得学习JNI技术了。以前都是我直接拿同事生成的.so库来使用,jni流程看过,但是没想过自己写Jni工程,这次设计新的 SDK,层次划分到jni要自己去做的时候才知道,jni要写也是很麻烦的,当然这也是指在自己没做过的情况下,这次就自己动手从0到1实现一遍用Android studio编写的工程吧!
2.NDK下载及配置
想要用工程编写jni首先一定要有NDK,那么NDK是什么呢? 下面先介绍下NDK是什么!
> 定义 :
Native Development Kit,是 Android的一个工具开发包【NDK是属于 Android 的,与Java并无直接关系】
> 作用:
快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK
即可通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互,其实最大原因就是可以在工程中帮助你生成jni的.h头文件
>应用场景:
在Android的场景下 使用JNI 【即 Android开发的功能需要本地代码(C/C++)实现】
>NDK特点:
>NDK的两种下载方式:
这是Google官方下载: 点击打开下载NDK链接
通过Android studio 下载
在创建的工程 点击 File -> Settings ->
一定要点Apply
OK,NDK下载完成
然后 右键工程-> Open Module -> Android NDK Location -> OK -> 等待编译
查看一下,等待编译
发现根目录local.properties里面多了NDK路径如下图:
接着我们在根目录gradle.properties下面加上如下图:
android.useDeprecatedNdk=true
继续我们在module下面的build.gradle下面加上ndk节点如下图:
ndk {
moduleName "JniTest"
}
3.编写Jni接口
然后Build -> Make Project一下(记住一定不能拉下这一步,要不你编写的接口内容不会同步到class文件中),我们会发现在/JniTest/app/build/intermediates/下面多了一个classes文件夹.我们可以打开AS下面的Terminal进入到classes下面的release文件夹下。注意:创建工程默认为debug模式的,有的可能编译不过,建议更改为release模式
如下图:
正常来说执行到这里 我们只需要输入 javah com.butel.jni.ButelTestJni 就可以生成了,但是有时候会报下图这样的错误:
那到这里 我们还是按照上一篇文章所说的执行 javah -classpath . -jni com.butel.jni.ButelTestJni
好了 到这里 我们的.h文件就生成了!