- Makefile是一种管理和编译 Linux C/C++ 项目的工具,
- 而Gradle也是一种代码构建工具,只不过是针对Java语言的,它同样可以通过一些配置文件和脚本来完成代码的依赖、第三方库的引入、编译的自动化配置等功能。https://developer.aliyun.com/article/420821
Gradle+CMake构建Android Native项目 https://blog.csdn.net/Zaratustra/article/details/77965577
Android.mk、CMake、Gradle简介 NDK和JNI的关系
https://www.cnblogs.com/hanmolabi/p/7764293.html
原文地址:http://hubingforever.blog.163.com/blog/static/171040579201152185542166/
android.mk文件是GNU makefile的一小部分,它用来对android程序进行编译。因为所有的编译文件都在同一个GNU MAKE执行环境中进行执行,而android.mk中所有的变量都是全局的。因此,您应尽量少声明变量,不要认为某些变量在解析过程中不会被定义。
一个android.mk可以编译多个模块,每个模块属下列类型之一:apk java c++应用程序 c++静态库 c++共享库
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。能输出各种各样的makefile和project文件,能测试编译器所支持的C++特性,类型UNIX下的automake。
CMake可以编译源代码、制作程序库、产生适配器、还可以用任意的顺序建构执行档。也支持静态和动态程式库的建构。
CMake常见指令总结,可参阅博文:http://blog.csdn.net/u012839187/article/details/45790491
ADD_LIBRARY(hello SHARED${LIBHELLO_SRC})生成动态静态库
SET_TARGET_PROPERTIES为一个目标设置属性。该命令的语法是列出所有你想要变更的文件,然后提供你想要设置的值。你能够使用任何你想要的属性/值对,并且在随后的代码中调用GET_TARGET_PROPERTY命令取出属性的值。
include_directories添加头文件目录
link_directories添加需要链接的库文件目录(用于多个第三方库)
target_include_directories 向target中添加头文件目录
gradle在语法上是基于groovy语言的,在项目管理上是基于ant和maven概念的项目自动化建构工具
关于gradle的博文:http://www.jianshu.com/p/001abe1d8e95
NDK与JNI的关系 http://blog.csdn.net/banketree/article/details/12167145
JNI是java语言提供的java和c相互沟通的机制,java可通过jni调用本地c++代码。jni是本地编程接口。NDK是一系列工具的集合,它提供了一系列的工具,帮助开发者快速开发c的动态库,并能自动将so和java应用一起打包成apk。
java通过jni机制和c++沟通的具体步骤:
1编写包含native本地方法的java类
2通过javah工具生成c++的头文件
3使用c++实现头文件
4使用交叉编译工具对c++本地代码进行编译,最后通过链接生成so可执行的c++库
5实际执行java代码去和本地的c++代码沟通