由来
在使用Android Studio作为IDE开发Android的应用的时候,我们可以直接使用IDE集成的build工具对应用进行编译打包,也可以使用命令行的形式执行gradle命令来做同样的事情,也就是基于gradle来构建android应用的build系统。在需要用到gradle的时候,我们可以在我们的电脑上安装gradle,然后配置好环境变量后就可以使用了。但是当我们把项目分享给电脑上没有gradle的人时,问题就来了。或者我们在一个没有装gradle的server上build的时候也会出现同样的问题。
所以基于此,gradle系统引入了我们今天的主角-gralde wrapper: 一个gradle的封装体。有了gradle wrapper,即便你的机器上没有安装gradle,也可以执行gradle的构建工作了。
创建
想使用gradle wrapper,首先要在你的项目中创建。具体来说就是在build.gradle里面加入类似于下面的task:
// File: build.gradle
task createWrapper(type: Wrapper) {
gradleVersion = '0.9-preview-1'
}
什么原理? 其实很简单:在生成gradle wrapper的时候指定项目所需要用的gradle版本,这样当别人用gradle wrapper的时候,
然后执行该task: $ gradle createWrapper
就会在项目工程生成以下的文件:
Project-name/
gradlew
gradlew.bat
gradle/wrapper/
gradle-wrapper.jar
gradle-wrapper.properties
这些文件构成了我们的gradle wrapper。
需要注意的是:这些文件需要上传到版本控制工具(例如git, svn)的server端。生成这些文件的操作只需要做一次即可。
使用
需要使用gradle wrapper的时候,我们就直接在项目根目录下直接执行gradlew
(gradle wrapper的简写), 使用gradlew的方式和gradle一模一样, 例如通过gradlew tasks
来查看所有的任务。事实上,执行gradlew命令的时候,gradlew会委托gradle命令来做相应的事情,所以gradlew真的只是一个壳而已。
当执行gradlew的时候,wrapper会检查当前机器是否已经安装了对应版本的gradle,如果安装了那么gradlew就会委托gradle执行用户输入的命令。如果还未安装的话,那么首先会自动帮我们从gradle repository下载安装。当然你也可以在配置文件中指定想要下载的server来替代默认的gradle repo。
不过需要说明的是,假如你是用android studio新建的项目,它会自动为新建的工程添加wrapper。也就是你就不必自己再去创建gradle wrapper了,直接在命令行或者你的编译脚本中使用就好了。
使用场景1
编写脚本,调用gradlew来进行项目的每日构建。或者当你想同时编译多个项目的时候,也可以通过此形式轻松实现,这一点上会比使用Android Studio方便不少。
使用场景2
用于编译第三方应用:当我们从github或者其他地方拿到一个其他人的Android应用的项目代码的时候,假如该项目也是基于Android studio或者gradle开发的,那么我们也可以借助gradlew进行编译从而生成apk。一般来说只需要两条命令就搞定了:
gradlew clean
gradlew build
怎么样,是不是很方便?免去了很多实用Android导入、编译带来的痛苦了。
原文地址:http://zhixinliu.com/2015/03/25/2015-03-25-gradle-wrapper/