您的位置:首页 > 移动开发 > Android开发

Android之一个简单的NDK使用(二)

2017-10-06 11:55 316 查看
继上一篇的直接实现后,这一篇主要是记录一些概念上的东西,或是一些解释。

注:以下代码里的“#”号表示注释。

CMake

你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。

CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeLists.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等 [1]。

来自 CMake入门实战

小结

CMake是一个更高级的编译配置,它让开发者只要编写一次文件后,会根据不同的平台自动生成不同的本地化文件。

CMakeLists

在上一篇的CMakeLists.txt文件里有三个关键词:add_library,find_library和target_link_libraries。

add_library

这个方法主要是让你写的cpp文件作为一个库添加到构建脚本里,这样就能被调用到。

add_library( # 设置一个名称
native-lib

# 设置这个库为SHARED类型
SHARED

# 指定出它的路径。
src/main/cpp/native-lib.cpp

)


find_library

这个方法主要是添加NDK的API。就是我们需要NDK的什么API就在这里进行声明添加即可。

find_library( # 设置一个路径名
log-lib

# 指定要用的NDK里的哪个库,主要是让CMake能够去定位到
log )


target_link_libraries

我理解应该是一些库之间的一些关联。

target_link_libraries( # 指定目标库
native-lib
calculateBeerResult

# 连接目标库和NDK里的log库,${}这个写法表示引用
${log-lib} )


JNI的使用

上一篇的native-lib.cpp里主要是对JNI的一些使用,里面有C(C++)语言的语法,这个我就不写了,因为我也不熟悉,也是当时自己搜索后写出来的。

#include <jni.h>
#include "calculateBeerResult.h" //引入计算方法的头部

extern "C"
JNIEXPORT jintArray JNICALL
Java_message_license_szca_com_drinkbeer_presenter_CalculateBeerPresenter_getCalculateResult(
JNIEnv *env,
jobject /* this */,
int money//java传进来的金额) {
}


待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ndk