专栏首页AnRFDevGradle for Android 开始

Gradle for Android 开始

Gradle for Android开始

Google在Gradle中的目标:能复用代码,创建构建变量,能配置和定制构建过程。

Gradle基础

Gradle构建脚本并不是用XML来写的,而是基于Groovy的一种(domain-specifc language) DSL语言。这是一种运行在JVM上的动态语言。

如果要构建新的任务和插件,我们需要了解这门语言。

Projects and tasks

这是Gradle种最重要的两个概念。每个构建(build)至少包含一个project,每一个project包含 一个或多个task。每个build.gradle代表一个project。task被定义在这个构建脚本中。 一个task对象包含一列需要被执行的Action对象。一个Action对象就是一块被执行的代码,就像 Java中的方法。

当初始化构建进程时,Gradle收集build文件中的project和task对象。

构建的生命周期(The build lifecycle)

为简化构建过程,构建工具创造了一种工作流的动态模型DAG(Directed Acyclic Graph)。 这意味着所有的任务会一个接一个地执行,不会出现循环的情况。 一个任务一旦被执行就不会再被调用。没有依赖的任务永远是最优先执行的。 在配置过程中生成依赖关系。

一个Gradle构建过程有3个步骤:

  • 初始化:工程实例被创建时初始化。如果有多个模块,每个模块有自己的build.gradle文件, 多个project被创建。
  • 配置:这一步执行build脚本,创建并配置每个project的task。
  • 执行:Gradle决定执行那些任务。根据当前目录和传入参数执行task。

build配置文件

build.gradle文件。配置build的地方。

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

repositories块中,指定JCenter作为依赖仓库。 这个脚本获取了Android构建工具。这个Android插件提供了构建和测试应用所需的功能。

插件被用来扩展Gradle构建脚本的功能。在project中使用插件,就可以定义属性和任务。

Gradle Wrapper初步

Gradle是一个开发中的工具。使用Gradle Wrapper可以避免一些问题,确保能构建顺利。 Gradle在Windows系统上提供了batch文件,在其他系统上提供了shell脚本。试图运行脚本时,会 自动检查并下载Gradle。但在我们的网络比较令人着急。可以尝试在网络上找资源。

比如我下载了一个gradle-2.14.1-all.zip,将其放到Android工程的gradle/wrapper下

gradle
`-- wrapper
    |-- gradle-2.14.1-all.zip
    |-- gradle-wrapper.jar
    `-- gradle-wrapper.properties

然后修改gradle-wrapper.properties文件,把Url修改成 distributionUrl=gradle-2.14.1-all.zip

在Android Studio提供的Terminal中运行grawdlew,先unzipping,然后开始下载依赖文件。 这些文件在windows中默认存放到 C:\Users\UserName\.gradle\wrapper\dists\gradle-2.14.1-all,还是很占空间的。 此时你可以在项目下的命令行中使用grawdlew命令。比如查看版本。

G:\rust_proj\NDKProj>gradlew -v

------------------------------------------------------------
Gradle 2.14.1
------------------------------------------------------------

Build time:   2016-07-18 06:38:37 UTC
Revision:     d9e2113d9fb05a5caabba61798bdb8dfdca83719

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_77 (Oracle Corporation 25.77-b03)
OS:           Windows 7 6.1 amd64

如果在另一个Android项目下同样复制了gradle-2.14.1-all.zip,并且尝试运行gradlew, C盘里相应目录下又会多一个文件夹。

获取Gradle Wrapper

打开Windows CMD,进入前面配置好的Android工程目录,同样可以运行gradlew。

此时我们的C盘里已经有gradle-2.14.1-all.zip了。找到gradle.bat的路径,将其添加到 电脑PATH中。这里添加到用户的环境变量中。

在G盘新建一个目录gradleTest,然后创建一个build.gradle文件;其中填写如下代码

task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}

进入刚才的目录,在CMD中直接运行gradle

G:\gradleTest>gradle
:help
Welcome to Gradle 2.14.1.
To run a build, run gradle <task> ...
To see a list of available tasks, run gradle tasks
To see a list of command-line options, run gradle --help
To see more detail about a task, run gradle help --task <task>
BUILD SUCCESSFUL
Total time: 1.714 secs

此时目录下生成了一个.gradle目录

如果当前目录下没有build.gradle文件,gradle也会执行并生成.gradle目录。

我们来观察Android项目里Gradle Wrapper的情况

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

Gradle Wrapper包含3个部分:

  • MS可执行的gradlew.bat和Linux, Mac OS X可执行的gradlew
  • 脚本需要的Jar文件
  • 一个properties文件

在前面我们已经把properties文件修改成了这样:

#Mon Aug 29 19:26:36 CST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=gradle-2.14.1-all.zip

原distributionUrl如下:

distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

这意味着我们可以使用不同的URL和Gradle。我们前面已经这么做了。

运行基本的构建任务(task)

进入Android工程目录下,用命令行执行gradlew gradlew tasks会打印出任务列表;gradlew tasks --all打印出所有的任务

gradlew assembleDebug编译当前项目,创建一个debug版本的apk

gradlew clean清理当前项目的output

gradlew check运行所有的检查,通常是在真机或者模拟器上运行测试

gradlew build触发assemble 和 check

这些功能在Android Studio上都有相应按键

参考:Gradle for Android Kevin Pelgrims

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Gradle For Android(1)--使用AndroidStudio开始Gradle

    build.gradle是为了构建Android项目的脚本。Gradle构建脚本并不是使用传统的XML,而是基于Groovy的domain-specific l...

    None_Ling
  • MAC上使用Android Studio 3.0的Gradle问题小解

    2017-06-11 by Liuqingwen | Tags: Android Gradle | Hits

    IT自学不成才
  • 优化Android Studio/Gradle构建

    六月的雨
  • 详解Android Studio 3.0的新特性与适配

    Android Studio升级到3.0后,有不少的改动和新特性,先贴出官方的迁移说明。

    砸漏
  • 【本周重磅】高效玩转Gradle

    作为一名合格的Android开发者,学习使用Android Studio,掌握Gradle,了解Groovy语法是很有必要的

    博文视点Broadview
  • 彻底搞懂Gradle、Gradle Wrapper与Android Plugin for Gradle的区别和联系

    首先用一段通俗易懂但是不是非常专业的话描述一下三者的概念、区别和联系。 Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把G...

    用户1221057
  • 详解如何使用Android Studio 进行NDK开发和调试

    尽管Android Studio已经越来越流行了,但很多人还是习惯于Eclipse或源码环境下开发JNI应用。个人认为使用Android Studio作NDK开...

    砸漏
  • Gradle for Android 系列:初识 Gradle 文件

    ? 我们用 Android Studio 新创建一个项目时,会自动生成 3 个 Gradle 文件: ? 接下来介绍这三个文件的作用。 1. setting....

    张拭心 shixinzhang
  • 开发工具总结(4)之Android Studio3.0填坑指南

    作为这个世界上走在最前沿的生物“猿”,怎么能对新事物一无所知呢,10月26日,随着Android 8.1 Oreo的预览版发布,Android Studio3....

    AWeiLoveAndroid
  • Publish Gradle Android Library to jCenter Repository

    本文主要介绍如何通过Gradle将Android库项目上传到jCenter仓库中。

    宅男潇涧
  • Gradle Plugin for Android Development User Guide 1

    Gradle Plugin for Android Development User Guide (1)

    宅男潇涧
  • 开发工具总结(2)之全面总结Android Studio2.X的填坑指南

    前言:好多 Android 开发者都在说Android Studio太坑了,老是出错,导致开发进度变慢,出错了又不知道怎么办,网上去查各种解决方案五花八门,有些...

    AWeiLoveAndroid
  • gradle究竟为何频频出错 as的学习笔记

    Internal error. Please report to https://code.google.com/p/android/issues

    砯芸
  • Android Gradle系列-入门篇

    接下来的一段时间会对Android Gradle的相关知识进行梳理,所以借此整理成一个系列。如果你是刚入行的新秀,那么这个系列将会非常适合你,因为Android...

    Rouse
  • Gradle for Android简要指南

    前言 Android官网构建系统介绍https://developer.android.com/studio/build/index.html

    Anymarvel
  • Intellij IDEA 插件开发之自建插件仓库

    Intellij IDEA 有一个自己的官方的插件仓库,但是当我们的开发的 Intellij IDEA 的插件不能够对外公开时,我们就需要搭建自己的 Intel...

    用户8704998
  • Gradle从入门到了解 - 简书

    Gradle(英[g'reɪdl])是一个任务驱动型的构建工具,是一个依赖管理工具,更是一个编程框架。 它抛弃了基于XML的各种繁琐配置,取而代...

    用户2802329
  • Ionic构建打包apk出现的问题集合

    当我们写完 ionic 项目准备打包成 apk 时(比如执行 ionic cordova platform add android 或者 ionic cordo...

    laixiangran
  • 优化Android Studio/Gradle构建

        经过测试,编译速度有很大提升,比较大的项目从之前的5-8分钟可以减少到1-2分钟。

    AWeiLoveAndroid

扫码关注云+社区

领取腾讯云代金券