Gradle for Android 第一篇( 从 Gradle 和 AS 开始 )

这一系列暂不更新,相关技术讨论,请移步微信群,谢谢,但愿你们多多支持!java

图片描述

正如你们所见,这是本英文书,而因为国内的gradle翻译资料不全,因此特次开辟专栏,翻译gradle for android这本书,同时添加本身的心得体会以及在实际工做上的实战,但愿你们可以喜欢。android

这会是一个系列,因此若是你看完这篇文章,请看下列文章:shell

Gradle for Android 第二篇( Build.gradle入门 )segmentfault

Gradle for Android 第三篇( 依赖管理 )windows

Gradle for Android 第四篇( 构建变体 )浏览器

Gradle for Android 第五篇( 多模块构建 )微信

Gradle for Android 第六篇( 测试)app

Gradle for Android 第七篇( Groovy入门 )eclipse

图片描述

若是你是名Android开发新手,或者是名从eclipse切换到Android studio的新手,那么我强烈建议您follow个人文章,正如封面所见,利用gradle构建工具来自动构建你的Android项目。废话很少说,咱们直接开始吧。jvm

今天主要介绍Android studio工具的使用,以及cradle基础入门,使用cradle wrapper和如何从eclipse迁移到Android studio。

这篇文章记于2015.12.30,Android studio正式版本已经开发到1.5,而预览版已经到了2.0,因此转到Android studio吧。

当你第一次打开Android studio的时候,有一个视图显示你即将建立的环境以及确保你使用了最新的Android SDK和必要的google依赖包,同时会让你选择是否建立AVD,这样你就可使用模拟器了。在这儿多说几句:

  1. 尽可能使用Android studio 2.0,由于它真的变快了,而其模拟器的速度也提高了很多,我使用至今,也无发现任何bug,因此彻底不用担忧。

  2. 若是使用模拟器开发Android,尽可能使用Genymotion模拟器,尽管其如今的Android6.0仍然有不少bug,可是在其如下版本,其速度仍是很是快的,利用模拟器开发,为虚拟机安装文件夹浏览器,是及时查看SQLite表文件利器,具体操做办法,能够google。

  3. 尽可能使用最新的23.0.0以上的构建版本。

理解基本的Gradle

若是你想建立一个Android project基于gradle,那么你必须写一个构建脚本,这个文件一般称之为build.grade,你可能已经觉察到了,当咱们查看这一脚本,gradle会为咱们提供不少默认的配置以及一般的默认值,而这极大的简化了咱们的工做,例如ant和maven,使用他们的时候,咱们须要编写大量的配置文件,而这很恶心。而gradle得默认配置,若是你须要使用本身的配置,彻底能够简单的去重写他们就好。

Gradle脚本不是像传统的xml文件那样,而是一种基于Groovy的动态DSL,而Groovy语言是一种基于jvm的动态语言。

你彻底不用担忧,你在使用gradle的时候,还须要去学习Groovy语言,该语言很容易阅读,而且若是你已经学习过java的话,学习Groovy将不会是难事,若是你想开始建立本身的tasks和插件,那么你最好对Groovy有一个较深的理解,然而因为其基于jvm,因此你彻底可能经过纯正的java代码或者其余任何基于jvm的语言去开发你本身的插件,关于插件开发,咱们后续将会有相关介绍。

Project和tasks

在grade中的两大重要的概念,分别是project和tasks。每一次构建都是有至少一个project来完成,因此Android studio中的project和Gradle中的project不是一个概念。每一个project有至少一个tasks。每个build.grade文件表明着一个project。tasks在build.gradle中定义。当初始化构建进程,gradle会基于build文件,集合全部的project和tasks,一个tasks包含了一系列动做,而后它们将会按照顺序执行,一个动做就是一段被执行的代码,很像Java中的方法。

构建的生命周期

一旦一个tasks被执行,那么它不会再次执行了,不包含依赖的Tasks老是优先执行,一次构建将会经历下列三个阶段:

  1. 初始化阶段:project实例在这儿建立,若是有多个模块,即有多个build.gradle文件,多个project将会被建立。

  2. 配置阶段:在该阶段,build.gradle脚本将会执行,为每一个project建立和配置全部的tasks。

  3. 执行阶段:这一阶段,gradle会决定哪个tasks会被执行,哪个tasks会被执行彻底依赖开始构建时传入的参数和当前所在的文件夹位置有关。

build.gradle的配置文件

基于grade构建的项目一般至少有一个build.gradle,那么咱们来看看Android的build.gradle:

buildscript {
   repositories {
        jcenter()
   }
   dependencies {
       classpath 'com.android.tools.build:gradle:1.2.3'
 } 
}

这个就是实际构建开始的地方,在仓库地址中,咱们使用了JCenter,JCenter相似maven库,不须要任何额外的配置,grade还支持其余几个仓库,不管是远程仍是本地仓库。

构建脚本也定义了一个Android构建工具,这个就是Android plugin的来源之处。Android plugin提供了全部须要去构建和测试的应用。每一个Android应用都须要这么一个插件:

apply plugin: 'com.android.application'

插件用于扩展gradle脚本的能力,在一个项目中使用插件,这样该项目的构建脚本就能够定义该插件定义好的属性和使用它的tasks。

注意:当你在开发一个依赖库,那么你应该使用'com.android.library',而且你不能同时使用他们2个,这将致使构建失败,一个模块要么使用Android application或者Android library插件,而不是两者。

当使用Android 插件的时候,Android标签将能够被使用,以下所示:

android {
       compileSdkVersion 22
       buildToolsVersion "22.0.1"
}

更多的属性咱们将在第二章中进行讨论。

项目结构

和eclipse对比来看,Android studio构建的结构有很大的不一样:

MyApp
   ├── build.gradle
   ├── settings.gradle
   └── app
       ├── build.gradle
       ├── build
       ├── libs
       └── src
           └── main
               ├── java
               │   └── com.package.myapp
               └── res
                   ├── drawable
                   ├── layout
                   └── etc.

grade项目一般在根文件夹中包含一个build.gradle,使用的代码在app这个文件夹中,这个文件夹也可使用其余名字,而没必要要定义为app,例如当你利用Android studio建立一个project针对一个手机应用和一个Android wear应用的时候,模块将被默认叫作application和wearable。

gradle使用了一个叫作source set的概念,官方解释:一个source set就是一系列资源文件,其将会被编译和执行。对于Android项目,main就是一个source set,其包含了全部的资源代码。当你开始编写测试用例的时候,你通常会把代码放在一个单独的source set,叫作androidTest,这个文件夹只包含测试。

开始使用Gradle Wrapper

grade只是一个构建工具,而新版本老是在更迭,因此使用Gradle Wrapper将会是一个好的选择去避免因为gradle版本更新致使的问题。Gradle Wrapper提供了一个windows的batch文件和其余系统的shell文件,当你使用这些脚本的时候,当前gradle版本将会被下载,而且会被自动用在项目的构建,因此每一个开发者在构建本身app的时候只须要使用Wrapper。因此开发者不须要为你的电脑安装任何gradle版本,在mac上你只须要运行gradlew,而在windows上你只须要运行gradlew.bat。

你也能够利用命令行./gradlew -v来查看当前gradle版本。下列是wrapper的文件夹:

myapp/
   ├── gradlew
   ├── gradlew.bat
   └── gradle/wrapper/
       ├── gradle-wrapper.jar
       └── gradle-wrapper.properties

能够看到一个bat文件针对windows系统,一个shell脚本针对mac系统,一个jar文件,一个配置文件。配置文件包含如下信息:

#Sat May 30 17:41:49 CEST 2015
   distributionBase=GRADLE_USER_HOME
   distributionPath=wrapper/dists
   zipStoreBase=GRADLE_USER_HOME
   zipStorePath=wrapper/dists
   distributionUrl=https\://services.gradle.org/distributions/
   gradle-2.4-all.zip

你能够改变该url来改变你的gradle版本。

使用基本的构建命令

使用你的命令行,导航到你的项目,而后输入:

$ gradlew tasks

这一命令将会列出因此可运行的tasks,你也能够添加--all参数,来查看全部的task。
当你在开发的时候,构建项目,你须要运行assemble task经过debug配置:

$ gradlew assembleDebug

该任务将会建立一个debug版本的app,同时Android插件会将其保存在MyApp/app/build/ outputs/apk目录下。

除了assemble,还有三个基本的命令:

  • check 运行因此的checks,这意味着运行全部的tests在已连的设备或模拟器上。

  • build 是check和assemble的集合体。

  • clean 清楚项目的output文件。

保持旧的eclipse文件结构

关于如何将eclipse项目导入Android studio本文再也不介绍。

android {
     sourceSets {
       main {
         manifest.srcFile 'AndroidManifest.xml'
         java.srcDirs = ['src']
         resources.srcDirs = ['src']
         aidl.srcDirs = ['src']
         renderscript.srcDirs = ['src']
         res.srcDirs = ['res']
         assets.srcDirs = ['assets']
    }
     androidTest.setRoot('tests')
    } 
}

在grade文件中配置,将会保存eclipse目录结构,固然,若是你有任何依赖的jar包,你须要告诉gradle它在哪儿,假设jar包会在一个叫作libs的文件夹内,那么你应该这么配置:

dependencies {
       compile fileTree(dir: 'libs', include: ['*.jar'])
}

该行意为:将libs文件夹中全部的jar文件视为依赖包。

总结

经过本文,咱们能够学习到gradle的优点,以及为何要使用gradle,咱们简单的看了看Android studio,以及其是如何帮助咱们生成build文件。

同时咱们学习了Gradle Wrapper,其让咱们维护以及分享项目变得更加简单,咱们知道了如何建立一个新的项目在Android studio中,以及如何从eclispe迁移到Android studio而且保持目录结构。

同时咱们学习了最基本的gradle task和命令行命令。在下一篇文章中,咱们将会定制本身的build文件。