原文地址:
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Using-sourceCompatibility-1.7
翻译:Android Studio 中文组(大锤译)
鉴于Android Studio使用Gradle构建项目,在IDE的使用过程中可能会遇到很多令人头疼的问题。大锤也是第一次接触,为有个基本的认识,特找来Android官方手册,和大家一起学习学习。翻译不当之处,望指出。
为什么要用Gradle?
Gradle是比较先进的构建系统,也是一个很好的构建工具,允许通过插件自定义构建逻辑
以下是为什么Android Studio选择Gradle的主要原因:
需要准备:
Gradle 1.6 or 1.7
SDK with Build Tools 17.0.0 (released 5/16/2013)
Basic Project
在Gradle项目的根目录下,有个叫build.gradle的文件,它描述了这个项目的整体构建基础。
build文件
最基本的java程序,它的build.gradle文件就一句话: 最基本的Android项目,它的build.gradle如下: 我们一步步来分析一下上面三部分的内容。
默认的,只有目标编译环境是必要的,也就是compileSdkVersion这个属性。这和以前在project.properties中的target属性类似。
这两个目录里面,又分别有各自的代码源文件和资源文件。
对于 Android plugin, 又有以下额外的目录:
配置项目结构
根据Gradle文档说明,可以通过以下两个方法来重新配置项目结构。
或者:
而Android的项目也类似,如下列所示:
注:setRoot这个方法将所有src/instrumentTest目录下的文件及文件夹移到了tests/目录下。
通用任务
将一个plugin运用到build file中时,会自动创建一系列的构建任务(build task)去运行。Java plugin和Android Plugin也都会如此。
我们对于任务的约定有以下四个:
assemble, check and build任务自己本身不做任何事情,它们只是plugin锚点,真正任务的是由plugin来添加执行。
这样做的好处是,不管你在什么项目中,你都可以调用同样的命令来执行。
通过命令行,你可以得到更高级别的任务,命令如下: 列出当前运行的所有任务,以及查看他们之间的依赖关系: 注: Gradle会自动地检测一个任务中申明的输入和输出。当重复执行两次build任务时,Gradle会报告当前所有任务是UP-TO-DATE的状态。
Java项目的任务
Java plugin会创建两个任务,分别挂到锚任务中,如下:
通常,java项目中的任务只会用到assemble和check这两个,更多的其他task详见 此处 。
Android 任务
Android的任务比通用的四大任务多了“connectedCheck”和“deviceCheck”,这是想要让项目忽视设备是否连接,正常执行check任务。
注:build任务不依赖与deviceCheck或connectedCheck
一个安卓的项目至少有两个输出,一是debug apk,二是release apk.这两个输出都有自己对应的锚任务,来实现它们各自的构建
调用assemble任务时会同时调用assembleDebug和assembleRelease来保证有两个输出。
Tip : Gradle 支持Camel命名方式的简写,比如在输命令行时,可以用 aR 代替 assembleRelease ,如果没有其他别的任务也是aR简写的话:
Check 任务也有它们自己的依赖关系:
最后, 为了能够安装卸载,Android plugin 为所有的build类型(debug,release,test)都创建了 install/uninstall 任务,但需要signing。
翻译:Android Studio 中文组(大锤译)
鉴于Android Studio使用Gradle构建项目,在IDE的使用过程中可能会遇到很多令人头疼的问题。大锤也是第一次接触,为有个基本的认识,特找来Android官方手册,和大家一起学习学习。翻译不当之处,望指出。
为什么要用Gradle?
Gradle是比较先进的构建系统,也是一个很好的构建工具,允许通过插件自定义构建逻辑
以下是为什么Android Studio选择Gradle的主要原因:
- 使用领域专用语言(Domain Specific Language)来描述和处理构建逻辑。(以下简称DSL)
- 基于Groovy。DSL可以混合各种声明元素,用代码操控这些DSL元素达到逻辑自定义。
- 支持已有的Maven或者Ivy仓库基础建设
- 非常灵活,允许使用best practices,并不强制让你遵照它的原则来。
- 其它插件时可以暴露自己的DSL和API来让Gradle构建文件使用。
- 允许IDE集成,是很好的API工具
需要准备:
Gradle 1.6 or 1.7
SDK with Build Tools 17.0.0 (released 5/16/2013)
Basic Project
在Gradle项目的根目录下,有个叫build.gradle的文件,它描述了这个项目的整体构建基础。
build文件
最基本的java程序,它的build.gradle文件就一句话: 最基本的Android项目,它的build.gradle如下: 我们一步步来分析一下上面三部分的内容。
- buildscript{...} 配置了驱动build的代码,它声明将在Maven中央仓库,取一个classpath dependency,也就是Android plugin for Gradle v0.5.6
- apply plugin 指明了用到的plugin是android,就像前面java程序中,用的plugin是java一样
- android{...} 中配置了所有android构建的参数,这里也就是Android DSL的入口点。
默认的,只有目标编译环境是必要的,也就是compileSdkVersion这个属性。这和以前在project.properties中的target属性类似。
值得注意的是,如果你在Android项目中写 apply plugin:java 而不是apply plugin:android的话,将会build失败。
项目结构
两大组件(source sets): main source code 和 test code. 它们分别在以下两个目录中:
这两个目录里面,又分别有各自的代码源文件和资源文件。
对于 Android plugin, 又有以下额外的目录:
配置项目结构
根据Gradle文档说明,可以通过以下两个方法来重新配置项目结构。
或者:
而Android的项目也类似,如下列所示:
注:setRoot这个方法将所有src/instrumentTest目录下的文件及文件夹移到了tests/目录下。
通用任务
将一个plugin运用到build file中时,会自动创建一系列的构建任务(build task)去运行。Java plugin和Android Plugin也都会如此。
我们对于任务的约定有以下四个:
assemble, check and build任务自己本身不做任何事情,它们只是plugin锚点,真正任务的是由plugin来添加执行。
这样做的好处是,不管你在什么项目中,你都可以调用同样的命令来执行。
通过命令行,你可以得到更高级别的任务,命令如下: 列出当前运行的所有任务,以及查看他们之间的依赖关系: 注: Gradle会自动地检测一个任务中申明的输入和输出。当重复执行两次build任务时,Gradle会报告当前所有任务是UP-TO-DATE的状态。
Java项目的任务
Java plugin会创建两个任务,分别挂到锚任务中,如下:
- jar 任务是编译执行Java源代码。
- test任务是运行unit test
通常,java项目中的任务只会用到assemble和check这两个,更多的其他task详见 此处 。
Android 任务
Android的任务比通用的四大任务多了“connectedCheck”和“deviceCheck”,这是想要让项目忽视设备是否连接,正常执行check任务。
注:build任务不依赖与deviceCheck或connectedCheck
一个安卓的项目至少有两个输出,一是debug apk,二是release apk.这两个输出都有自己对应的锚任务,来实现它们各自的构建
调用assemble任务时会同时调用assembleDebug和assembleRelease来保证有两个输出。
Tip : Gradle 支持Camel命名方式的简写,比如在输命令行时,可以用 aR 代替 assembleRelease ,如果没有其他别的任务也是aR简写的话:
Check 任务也有它们自己的依赖关系:
最后, 为了能够安装卸载,Android plugin 为所有的build类型(debug,release,test)都创建了 install/uninstall 任务,但需要signing。