Android Studio2.2 CMAKE高效NDK开发
![]() 转自:http://www./pro/html/201611/76734.html前言
之前,每次需要边写C++代码的时候,我的内心都是拒绝的。 工具安装
Android Studio升级到2.2之后,我们可以先配置好NDK开发的一些所需工具,如图,在SDK Tools中勾选安装CMake、LLDB、NDK。
Android Studio自带DEMO了解CMAKE
Android Studio升级到2.2版本之后,在创建新的project时,界面上多了一个Include C++ Support的选项。勾选它之后将会创建一个默认的C++与JAVA混编的Demo程序。就让我们先来看看这个官方标准Demo吧。
File -> New -> New Project,在如下界面中勾选Include C++ Support,然后一路 Next,直到 Finish 为止即可。 Gradle中也有两处不同: java代码: 从native-lib.cpp的代码中我们能看到它使用的是静态注册的方式,动态注册的方式代码同传统JNI。 CMakeLists.txt文件中我们需要注意的是下面这三个地方。两个library的名字(需一致)以及一个cpp文件的路径,彼此需要对应一致,当我们自己定义library以及自己创建cpp文件时需要对应修改。 运行代码,就能看到效果,调用了C++方法在界面上显示了Hello from C++字符串。这就是CMake方式进行NDK开发的Demo。 ![]()
但是我个人目前更关注的问题是C++代码自动补全提示的功能,当在cpp文件中写代码时,里面不再是一大片的红色,输入若干个字母的时候,也能给出提示了,简直叼渣天,至于原因…我就不清楚了,为什么在这里就有这个强大的功能了呢?哪位大神能解释下… CMake编译so文件
在Android Studio的Terminal中输入cmake,会提示: 需要在下载配置好CMake的环境变量,若没这个问题可跳过这个步骤。在如下网址中下载好对应的文件: 下载zip包后,解压缩。然后将cmake.exe所在的路径,添加到path环境变量中。cmake就成为有效命令了。 在CMakeLists.txt文件上级目录下执行cmake .命令,报错,暂未解决: 待完成 CMake和传统 JNI在目录结构和配置文件上的区别
现在我们有了CMake和传统JNI两种开发NDK的方法,它们在目录结构和Gradle上有所区别,下面我们将分别介绍目录区别和Gradle配置的区别。 这两种方式在目录上的区别就是两点: 二、Gradle CMake 事实上,我们在使用传统JNI方式的时候,上面的两处地方我们都省略了,也不会造成什么异常(若Android.mk存放位置在其他地方则需要配置)。CMake方式中第一处也可省略,但是第二处不能省略(同样,位置路径要写对),因为没有它将无法Build生成.externalNativeBuild文件夹。 另外,传统JNI开发还需要在项目根目录下的gradle.properties文件中配置 否则Build项目的时候会报错。 CMake的优势
可以直接的在C/C++代码中加入断点,进行调试 java引用的C/C++中的方法,可以直接ctrl+左键进入 对于include的头文件或者库,也可以直接进入 不需要配置命令行操作,手动的生成头文件,不需要配置android.useDeprecatedNdk=true属性 普通Android项目转NDK开发项目
我们之前说了,在创建新project时若勾选了Include C++ Support选项(需Android Studio版本不低于2.2),则该项目就已经是一个NDK开发项目了。那么,若项目已经存在,该如何再转为NDK开发项目呢?
传统JNI方式,在NDK开发 从入门到放弃(一:基本流程入门了解)中我们了解过: 新建jni目录,写好C/C++代码。静态注册JNI时我们使用了javah -jni对JAVA类进行操作自动生成了jni目录以及对应的头文件(事实上,当我们有一定经验后可以自己写,而不再需要使用该辅助命令来保证不写错,另外动态注册也是一个很值得提倡的方式),然后根据头文件写了C/C++代码。但在动态注册JNI时我们可以自己先创建好jni目录且写好C/C++代码。 在jni目录下创建且配置好Android.mk和Application.mk两个文件。 build.gradle文件中根据情况进行配置,可不进行配置使用默认值。 通过ndk-build操作,我们能得到对应的so文件,放置在相应位置,java代码中即可调用C/C++代码,运行程序。回顾前面提到的CMake方式的NDK开发,我们得到如下步骤: 新建cpp目录,写好C/C++代码。 创建且配置CMakeLists.txt文件。 build.gradle文件中根据情况进行配置,CMakeLists.txt文件的路径必须配置。 java代码中即可调用C/C++代码,运行程序。 project的build.gradle文件中,gradle版本不能低于2.2,否则会报错。
|
|