美文网首页JavaAndroid开发Android开发经验谈
JNI开发系列(一:环境搭建与第一个Demo)

JNI开发系列(一:环境搭建与第一个Demo)

作者: 长空_ca51 | 来源:发表于2017-10-22 15:34 被阅读38次

    网上有很多关于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就完成了。

    相关文章

      网友评论

        本文标题:JNI开发系列(一:环境搭建与第一个Demo)

        本文链接:https://www.haomeiwen.com/subject/uowguxtx.html