说明

开发Android应用,就离不开基于Gradle的Android构建系统。刚开始做Android开发的时候,遇到编译问题,一般上网搜索解决之。但一般很难知道问题产生的深层次原因,也不知道以后如何避免,更不知道如何快速解决一般性的编译异常问题。想去学习,但一般的博客或书籍的内容与Android开发者官网介绍的内容相似,没有关于Groovy和Gradle的内容,让人很难理解,只知道是这样,而不知道为什么是这样。于是,一直想对Android构建系统做一个系统性的学习和总结,最近终于能够抽出一些空来做这件事。

本来只想写一篇文章,但写到Gradle之后,发现篇幅太长,故分开写,当做一个系列。

核心问题

当我执行./gradlew assemble命令时,我需要知道Gradle做了哪些事情?它是如何做的(即源码是如何写的)?

学习目标
对于Android Build System,我们应该掌握哪些知识或技能点呢?

  1. Groovy。语言基础,尤其是闭包概念,API快速查阅等。
  2. Gradle。项目构建流程、基础概念、基本命令行指令、插件、API和Reference的查阅等。
  3. Android Plugin。基础概念、Reference的查阅等。
  4. Android应用构建(编译和打包)流程。

文章也将主要按照这个学习流程来写。

参考资料
主要参考官方文档

  1. Groovy 官网
  2. Gradle官网
  3. Android开发者官网-Configure your build


Android构建系统与三大知识块

Android构建系统
Android构建系统,即Android Build System,它的作用是编译app资源和源代码,并将它们打包成APK。之后我们可以对APK进行测试、部署、签名和发布。

The Android build system compiles app resources and source code, and packages them into APKs that you can test, deploy, sign, and distribute


三大知识块
整个Android Build System基于三大知识块:

  • Apache Groovy
    一种功能强大的JVM语言,包含脚本编写、DSL(特定领域语言)创建、运行时和编译时元编程以及函数编程等功能。
  • Gradle
    一种项目自动化构建工具。综合了Ant和Maven的一些特点,并使用Groovy的DSL来声明项目设置,而不是传统的XML。包含插件(Plugin)等功能。

提示:目前Gradle可以使用Kotlin语言来编写脚本,但建议初学者以Groovy为主,毕竟遗留项目以及当前大多数项目的Gradle脚本都是使用Groovy来编写的。

  • Android Plugin
    Gradle的插件,用于增加一些特定于构建Android应用的功能。


开发环境

  1. 主流操作系统。Gradle能够运行在所有的主流操作系统上,我的系统是masOS High Sierra Version 10.13.6

  2. Java JDK 7+。Gradle基于Groovy,Groovy需要Java开发环境,Gradle官网说Gradle运行的最低Java JDK版本是7。

    我的Java版本如下

$ java -versionjava version "1.8.0_91"Java(TM) SE Runtime Environment (build 1.8.0_91-b14)Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
  1. Gradle。Gradle环境中包含Groovy,因此安装Gradle之后就不需要单独安装Groovy了。各平台以及不同安装方式见官网 Installing Gradle。macOS上可以使用Homebrew快速安装$ brew install gradle,安装成功后,查看版本信息如下:
$ gradle -v------------------------------------------------------------Gradle 4.8.1------------------------------------------------------------Build time:   2018-06-21 07:53:06 UTCRevision:     0abdea078047b12df42e7750ccba34d69b516a22Groovy:       2.4.12Ant:          Apache Ant(TM) version 1.9.11 compiled on March 23 2018JVM:          1.8.0_91 (Oracle Corporation 25.91-b14)OS:           Mac OS X 10.13.6 x86_64


Hello World示例

创建一个简单的Gradle项目:包含一个build.gradle文件的目录。

$ mkdir hello-world$ cd hello-world$ vim build.gradle

build.gradle文件

task helloworld {  doLast {      println'Hello World!'  }}

执行任务

$ gradle helloworld# 输出如下:Starting a Gradle Daemon (subsequent builds will be faster)> Task :helloworldHello World!BUILD SUCCESSFUL in 2s1 actionable task: 1 executed

简单解释下 build.gradle文件:

  1. build.gradle是Gradle的编译脚本,在构建过程中Gradle会据此生成一个Project的Java实例。
  2. taskGradle DSL的关键字,用于添加任务到当前那项目中。helloworld是任务的名称。后面连接的一个Groovy闭包,构建时,会返回一个名为‘helloworld’的任务。
  3. 闭包中的doLastTask的方法,根据闭包的语法,省略了方法的对象,写全的话是owner.doLast。表示向任务中添加一个打印'Hello World!'字符串的Action到任务的Action列表的最后。
  4. 一个任务(Task)可以包含很多Action,执行任务的时候,顺序执行Action


参考

  1. Groovy 官网
  2. Gradle官网
  3. [Android开发者官网-Configure your build

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. 彻底扁平惹眼球 Android(安卓)5.0亮点汇总
  5. Android(安卓)小项目之--Mini音乐播放器
  6. android studio导入Eclipse项目出现的几个问题
  7. Mac系统配置Android(安卓)Studio的gradle命令
  8. 供大家学习的Android开源项目
  9. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框

随机推荐

  1. 史上最全谷歌Android开发工具Android(安
  2. android 之使用任意XML资源文件
  3. [Android]后台Service 弹出自定义dialog
  4. 解决Error inflating class android.supp
  5. Android快速开发框架之xUtils---图片模块
  6. 如何下载并编译Android4.0内核源码goldfi
  7. 利用adb工具android真机环境运行cpp(无需r
  8. 关于android真机测试(linux系统下)
  9. android中使用jni,ndk的C语言回调方法
  10. Android:制作Update.zip升级包