《Gradle for Android》笔记(1):Getting started

cover

这一系列文章本是我最近看《Gradle for Android》这本书的笔记。虽然我也买了中文版,但是包含很多机翻的痕迹;另外翻译过程中会把很多关键字翻译成中文,反而会变得难以理解,所以还是看了英文版。

当然,这系列文章并不是翻译,而是笔记。省略了很多我认为不重要的细节,或者一些过于简略的独立话题的概述,因为独立话题一般都有官方文档可供查阅;部分内容也有按我的思路整理。当然,也有我自己添加的内容。如果你也想了解一些Gradle相关的内容,除了文档之外,希望这一系列文章能够帮助到你。

目前我还没有完全看完这本书,所以这一系列会持续更新完成。前几天看到某个网站上有一系列这本书的翻译文章,本以为相见恨晚,但更新到一半就终止了;而实际上刚好后面的内容就是自定义Task之类的实用内容,真是可惜。好啦,让我们开始吧。

Gradle 和 Android Studio

  • Gradle 是一个独立的构建系统,和Android Studio并无绑定关系,可以独立运行于服务器进行持续集成。
  • Gradle 倾向于使用约定和习惯进行管理和配置,这可以简化工作。Gradle大量使用默认配置简化项目中的配置工作,所以一般不需要额外配置。
    • 比如:build.gradle这个文件名就是一个约定俗成。
  • Gradle 脚本使用基于Groovy的DSL(Domain-Specific Language,领域特定语言)语言进行编写。Groovy是针对JVM的动态语言。
  • 因为Groovy是基于JVM的,所以可以使用Java或其他基于JVM的语言编写Gradle插件。

构建系统

  • Projects,Tasks,Actions
    • Project:每个构建由至少一个Project构成。
    • Task:Task由构建语言描述,每个Project包含多个Tasks。
    • Action:类似一个Java方法。每个Task包含多个Action,按顺序执行。
  • 为了简化构建过程,Gradle会为工作流建立一个单向单次图。(DAG,Directed Acyclic Graph)
  • 生命周期

    • Initialization 初始化:创建Project实例。每个Module/每个build.gradle文件都对应一个Project实例。
    • Configuration 配置:针对每个Project实例,创建和配置其中的Tasks。Tasks之间的依赖关系就是在这个阶段生成的。
    • Execution 执行:执行特定的Tasks。Task是否执行依赖于启动构建的参数和当前的目录。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      // 构建脚本
      buildscript {
      // 依赖源
      repositories {
      // 使用JCenter作为依赖源
      // JCenter源为Gradle内置,所以无需额外配置。
      jcenter()
      }
      // 依赖
      dependencies {
      // Android构建工具
      classpath 'com.android.tools.build:gradle:1.2.3'
      }
      }
  • Android应用应当使用Application插件,Android库应当使用Library插件。

    • Android应用 apply plugin: ‘com.android.application’
    • Android库 apply plugin: ‘com.android.library’
  • Android项目定制的配置项在android关键字下。
    1
    2
    3
    4
    5
    6
    7
    // Android配置项
    android {
    // 编译SDK版本
    compileSdkVersion 22
    // 构建工具版本
    buildToolsVersion "22.0.1"
    }

Gradle Wrapper

  • Gradle Wrapper 是对Gradle的包装,可以避免因为Gradle升级带来的兼容问题。同时Gradle Wrapper会自动下载对应的Gradle版本,对于服务器构建来说,比较方便。
  • 运行Gradle Wrapper只需要执行gradlew命令或者gradlew.bat壁橱里文件即可。
  • 在项目根目录下使用./gradlew -v命令查看Gradle 版本和构建系统信息(系统版本,Ant版本,时间,JVM版本)。
  • 从Eclipse迁移,生成Gradle Wrapper文件。(新建Android Studio项目会自动生成。)

    • 安装好Gradle后,创建build.gradle文件,写如下Task

      1
      2
      3
      task wrapper(type: Wrapper) {
      gradleVersion = '2.4'
      }
    • 执行 gradle wrapper

    • 或者直接执行 gradle wrapper —gradle-version 2.4。(新版本Gradle内置wrapper任务)
  • Gradle Wrapper包含的文件结构:
    1
    2
    3
    4
    5
    6
    myapp/
    ├── gradlew
    ├── gradlew.bat
    └── gradle/wrapper/
    ├── gradle-wrapper.jar
    └── gradle-wrapper.properties

基础Gradle Tasks

  • ./gradlew tasks查看当前项目的Tasks,—all查看更详细的信息(Tasks依赖)。
  • 构建./gradlew assembleDebug,驼峰式简写./gradlew assDub./gradlew aD。简写会优先完全相同名称的tasks。
  • 其他基础Tasks
    • check:运行测试。
    • build:执行assemblecheck
    • clean:清理输出目录。

从Eclipse迁移到Android Studio

  • NR

总结

  1. Gradle独立于Android和Android Studio。
  2. Gradle使用很多的默认配置和约定俗成,所以写出来的配置通常很少。
  3. 关键概念Project,Task,Action。三者是依次包含的关系。
  4. Gradle执行时会创建多个Tasks的单向执行图,按照顺序依次执行。
  5. Android项目为了使用Gradle构建,需要Gradle依赖Android构建工具。
  6. Android项目由一个或多个Module组成,每个Module和他们外层的Project都对应一个Gradle的Project。
  7. 使用gradlew命令构建,提升兼容性和可靠性。
  8. 基础Tasks,assemblebuildcheckclean等。

其他文章