一、gradle简介
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
面向Java应用为主。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
Gradle是一个基于JVM的构建工具,它提供了:
像Ant一样,通用灵活的构建工具
可以切换的,基于约定的构建框架
强大的多工程构建支持
基于Apache Ivy的强大的依赖管理
支持maven, Ivy仓库
支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件。
对Ant的任务做了很好的集成
基于Groovy,build脚本使用Groovy编写
有广泛的领域模型支持构建
在Gradle中,有两个基本概念:项目和任务。
项目是指我们的构建产物(比如Jar包)或实施产物(将应用程序部署到生产环境)。一个项目包含一个或多个任务。
任务是指不可分的最小工作单元,执行构建工作(比如编译项目或执行测试)。
那么,这些概念和Gradle的构建又有什么联系呢?好,每一次Gradle的构建都包含一个或多个项目。
我们能够使用以下配置文件对Gradle的构建进行配置:
Gradle构建脚本(build.gradle)指定了一个项目和它的任务。
Gradle属性文件(gradle.properties)用来配置构建属性。
Gradle设置文件(gradle.settings)对于只有一个项目的构建而言是可选的,如果我们的构建中包含多于一个项目,那么它就是必须的,因为它描述了哪一个项目参与构建。每一个多项目的构建都必须在项目结构的根目录中加入一个设置文件。
Gradle的设计理念是,所有有用的特性都由Gradle插件提供,一个Gradle插件能够:
在项目中添加新任务
为新加入的任务提供默认配置,这个默认配置会在项目中注入新的约定(如源文件位置)。
加入新的属性,可以覆盖插件的默认配置属性。
为项目加入新的依赖。
Gradle用户手册提供了一系列标准Gradle插件。
在我们为项目加入Gradle插件时,我们可以根据名称或类型来指定Gradle插件。
我们可以将下面这行代码加入到build.gradle文件中,它通过名称指定Gradle插件(这里的名称是foo):
apply plugin: 'foo'
另一方面,我们也可以通过类型指定Gradle插件,将下面这行代码加入到build.gradle文件中(这里的类型是com.bar.foo):
apply plugin: 'com.bar.foo'
二、NDK简介
Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。
众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。
NDK包括了:
从C / C++生成原生代码库所需要的工具和build files。
将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。
支持所有未来Android平台的一系列原生系统头文件和库
为何要用到NDK?
概括来说主要分为以下几种情况:
1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。
3. 便于移植,用C/C++写的库可以方便在其他的嵌入式平台上再次使用。
1.NDK是一系列工具的集合
NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
2.NDK提供了一份稳定、功能有限的API头文件声明
Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。