NDK开发笔记---CMake构建JNI

  从AndroidStudio2.2版本开始,默认使用 CMake 的方式来构建NDK项目,也可以使用 ndk-build 的方式,这里我们主要介绍 CMake 的方式。

  首先,介绍 NDK 的下载与安装,在SDK设置那个页面,选择SDK Tools面板,就可以下载NDK。


如图所示,需要下载CMake、LLDB、NDK组件:

  • NDK

  这套工具集允许您为 Android 使用 C 和 C++ 代码,并提供众多平台库,让您可以管理原生 Activity 和访问物理设备组件,例如传感器和触摸输入。

  • CMake

一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
  • LLDB
一种调试程序,Android Studio 使用它来调试原生代码。
默认创建带C/C++ 支持的项目
我们在创建项目的时候,在向导的 Configure your new project 部分,选中 Include C++ Support 复选框如下图所示:


在向导的 Customize C++ Support 部分,您可以使用下列选项自定义项目:


  • C++ Standard
使用下拉列表选择您希望使用哪种 C++ 标准。选择 Toolchain Default 会使用默认的 CMake 设置
  • Exceptions Support
如果您希望启用对 C++ 异常处理的支持,请选中此复选框。如果启用此复选框,Android Studio 会将 -fexceptions 标志添加到模块级 build.gradle 文件的 cppFlags 中,Gradle 会将其传递到 CMake。
  • Runtime Type Information Support
如果您希望支持 RTTI,请选中此复选框。如果启用此复选框,Android Studio 会将 -frtti 标志添加到模块级 build.gradle 文件的 cppFlags 中,Gradle 会将其传递到 CMake。

可以根据自己项目需求进行选择。在这里,因为暂时用不到,直接点击完成即可。创建好的项目如下图所示:

其中:
  • cpp目录存放C/C++的头文件或者源文件
  • External Build Files存放我们的CMake脚本文件,这是通过Gradle来进行配置的。

项目自动生成的部分c++代码:



自动生成的部分Java代码:


自动生成的build.gradle文件:



android里多了:
externalNativeBuild {
    cmake {
        path "CMakeLists.txt"
    }
}

defaultConfig 里多了:
externalNativeBuild {
    cmake {
        cppFlags ""
    }
}

在主Mudule的跟目录下多了个CMakeLists.txt,我们定制自己的原生代码的时候主要就是修改CMakeLists.txt里面的配置:

我们可以看下CMakeLists.txt里面的配置:


  •  add_library 

里面有三个参数配置:
    native-lib:设置库的名字为native-lib,名字可以任意,但是要和System.loadLibrary("native-lib");保持一致 。
   SHARED:可以分享的,动态库。
   src/main/cpp/native-lib.cpp:配置源文件或者头文件的路径

  • find_library

    将find_library()命令添加到CMake构建脚本中以定位NDK库,并将其路径存储为一个变量。可以使用此变量在构建脚本的其他部分引用NDK库。
    log:找到log模块

  • target_link_libraries 

     指定要关联到原生库的库,第一个自然是我们add_library里面指定的库名字native-lib库,然后可以看到${log-lib},也就是引用了find_library里面定义的日志库。
     经过上面一系列的配置,项目就可以正常运行起来了。

实例:
  我们可以稍微修改代码,然后传一个字符串,在界面显示出来



在native-lib里,以log库为例,log库是android下的,如果我们新建项目的时候勾选上了 Incude C++ Support,那么自动生成的CMakeLists.txt里面默认会为我们添加log库。这里宏定义了个 LOG_TAG ,并宏定义打印函数 __android_log_print ,我们传入 ANDROID_LOG_ERROR ,所以是E级别。


输出的结果为:





为已有项目添加C/C++支持

上面介绍的是用 Android Studio 创建带C/C++支持的默认项目,下面我们介绍如何为已经有的项目添加C/C++支持。为了给出例子,我们先创建一个cmake-jni的项目。
首先,可以手动创建一个JNI目录,如下图所示:

然后在这个目录可以手动创建我们的C/C++源文件:fileCrypt.c

创建了一个CMake类:

在MainActivity里面代码调用:

在cmake-jni的目录下面创建一个File,名字为CMakeLists.txt,推荐使用这个名字和文件路径。
注意:必须先创建源文件,否则下面创建CMake脚本同步的时候不会通过。



CMakeLists.txt文件的内容为:

注意:

   1. 路径一定要注意跟我们所创建的目录名字一致,注意你创建的是“jni”还是“cpp”目录,否则同步不了。例如我们刚刚通过 Android Studio 创建的目录实质上是“jni”目录,因此这里写jni。你也可以手动创建 cpp目录,然后这里写 cpp目录,与标准的项目一样。

   2.我们创建的有可能是 C 也有可能是 C++,所以这里要注意写 .c 还是 .cpp 后缀,否则同步会失败。


然后选中 app,右击,选择下图中的选项:


找到我们创建的脚本文件,确认:


Android Studio 就会自动同步,然后在 cmake-jni模块的 build.gradle文件自动添加配置:


输出的结果为:


参考文章:

http://mp.weixin.qq.com/s/5DHJa5E-lZzy21-9edxoIg

http://mp.weixin.qq.com/s/_qwK5VNI40TO44eonDLo2

http://blog.csdn.net/qq_35071078/article/details/70544766



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值