网上有很多关于JNI开发的文章,可能你也留意到了有些文章讲解JNI开发流程的不太一样,我最开始接触的时候也是一脸懵逼;其实这些不一样是Android Studio版本不一样造成的,在Android Studio2.2版本完善了对C/C++的支持,还提供CMAKE方式的编译,支持lldb调试c/c++代码了,这算是Android Studio对JNI开发的一次重大革新吧。作为技术人员嘛,肯定要用最新的IDE才对吧,所以这次JNI的讲解就只针对Android Studio2.2版本以后了,我也不会列举与老版本开发流程的对比,个人觉得没有必要,如果确实需要了解,请自行Google或者问度娘吧。接下来进行正题了
一:环境搭建
先配置好NDK开发的一些所需工具,在SDK Tools中勾选安装CMake、LLDB、NDK,如下图:
NDK:让你能在 Android 上面使用 C 和 C++ 代码 的工具集。
CMake:外部构建工具。
LLDB:Android Studio上面调试本地代码的工具。
注:如SDK Tools 不显示LLDB,CMake 和NDK,说明你配置了国内镜像站点。
二:开始第一个Demo
1、File -> New -> New Project,在如下界面中勾选Include C++ Support,然后一路 Next,直到 Finish 为止即可
项目打开后我们查看目录结构,与常规项目不同的是多了.externalNativeBuild文件夹、cpp文件夹、CMakeLists.txt文件,如下图:
.externalNativeBuild文件夹:cmake编译好的文件, 显示支持的各种硬件等信息。系统生成。
cpp文件夹:存放C/C++代码文件,native-lib.cpp文件是该Demo中自带的,可更改。需要自己编写。
CMakeLists.txt文件:CMake脚本配置的文件。需要自己配置编写。
同时,Gradle文件也有不同:
此处主要作用是Gradle调用外部构建脚本 CMakeLists.txt。打开CMakeLists.txt文件,主要关心的有两部分:
两个library的名字(需一致)以及一个cpp文件的路径,彼此需要对应一致;add_library方法和target_link_libraries方法一一对应,当有多个库,多个C/C++文件时,可写多组add_library方法和target_link_libraries方法。
本来新建项目后就自带了一个Demo,但我把JNI的代码单独放在了一个类里面,此处做了简单修改,如下:
NdkTest:
native-lib文件:
此处方法的命名规则为 Java_命名空间(其中.换为_)_类名_方法名;其中解释一下
JNIEnv *:表示一个指向JNI环境的指针, 可以通过它来访问JNI提供的接口方法.
jobject:表示java对象中的this.
JNIEXPORT和JNICALL:它们是JNI种所定义的宏, 可以在jni.h这个头文件中查到
另外说明一下,如果要在native-lib.cpp文件中添加多少方法,必须添加在 extern “c” { } 中,或者在每个方法前加 extern “c” , 否则会报找不到方法!
ManActivity调用:
运行代码,就能看到效果,调用了C++方法在界面上显示了Hello from C++字符串和10, 简单的JNIDemo就完成了。
网友评论