文章目录

  • 简介
  • 配置信息
  • 使用.each引入依赖库
  • 任务信息

简介

Gradle是什么?Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。

可以理解为Gradle是一种自动化构建工具,使用Groovy语言开发。比如我们平时开发android项目时的检测、编译、打包、生成Java文件、生成JavaDoc、上传、发布等等。

当然,Gradle不仅仅可以使用Groovy开发,还可以使用Java、Kotlin和Scala来开发,后续会支持更多的语言。

Android Studio右边有一个Gradle的tab,点击后可以看到有哪些脚本任务。其中大部分是系统自带的,自己构建的脚本任务也会在此显示。

配置信息

我们可以新建单独的gradle文件,里面存放一些配置信息,然后在需要用到的地方引用进来即可。
比如我们新建一个config.gradle文件,内容如下:

ext {    android = [            compileSdkVersion       : 28,            buildToolsVersion       : "28.0.3",            minSdkVersion           : 19,            targetSdkVersion        : 28,            versionCode             : 1,            versionName             : "2.0.0",    ]    app = [            //support            appcompatv4             : 'com.android.support:support-v4:24.2.0',            appcompatv7             : 'com.android.support:appcompat-v7:28.0.0',            design                  : 'com.android.support:design:28.0.0'    ]}

然后在需要引用到它的gradle文件中声明引用,这里我们在项目的build.gradle文件中:

apply from: “config.gradle”

这样我们不需要在模块的gradle文件中再次声明引用了,模块的gradle可以直接使用config.gradle中的配置信息, 比如:

android {    compileSdkVersion rootProject.ext.android.compileSdkVersion    buildToolsVersion rootProject.ext.android.buildToolsVersion    defaultConfig {        applicationId "com.androidwind.androidquick"        minSdkVersion rootProject.ext.android.minSdkVersion        targetSdkVersion rootProject.ext.android.targetSdkVersion        versionCode rootProject.ext.android.versionCode        versionName rootProject.ext.android.versionName    }}

这样配置的好处就是可以不用将配置信息全部写在项目的build.gradle文件内,通过单独的gradle文件保存,达到分类清晰便于管理的目的。

使用.each引入依赖库

以上面的config.gradle文件为例,dependencies是我们设定的依赖库集合,那我们在app模块下面如果想引用这些依赖库怎么办?
普通的做法就是通过声明依赖一个一个地引进来:

implementation rootProject.ext.dependencies["appcompatv7"]

我们可以通过groovy的.each方法批量加入引用,以app模块的build.gradle为例:

dependencies {    app.each {        implementation it    }}

任务信息

除了可以存放配置信息外,gradle文件当然还可以执行脚本任务。
groovy中的任务是以task开头的,比如项目的build.gradle里面有一个删除的任务:

task clean(type: Delete) {    delete rootProject.buildDir}

接下来我们以一个实例来了解下任务是怎么使用的。
我们以checkStyle代码检测规范为例,我们制定了一系列的代码检测规范,希望提交上去的代码都是符合代码规范的,那么我们能希望在源头,也就是build项目的时候就能够同时进行代码规范检测,这样能够保证我们不会提交不符合代码规范的代码到服务器上。

同样我们新建一个checkstyle.gradle文件,顾名思义,里面就是存放代码规范检测相关的逻辑的。

allprojects {    project ->        // 代码规范检查        apply plugin: 'checkstyle'        checkstyle {            configFile rootProject.file('config/quality/checkstyle/checkstyle.xml')            toolVersion '8.2'            ignoreFailures false            showViolations true        }        task('checkstyle', type: Checkstyle) {            source 'src/main/java'            include '**/*.java'            exclude '**/gen/**'            classpath = files()        }        tasks.whenTaskAdded { task ->            boolean runCheckStyleOnLocalDev = "${enable_checkstyle}".toBoolean()            boolean runCheckStyleTask = task.name == 'prepareReleaseDependencies' || (runCheckStyleOnLocalDev && task.name == 'preBuild')            if (runCheckStyleTask) { //prepareReleaseDependencies, preBuild                println("checkstyle run task.name :" + task.name)                task.dependsOn 'checkstyle'            }        }}

然后在项目的build.gradle中引入:

apply from: ‘checkstyle.gradle’

或者

apply from: ‘./checkstyle.gradle’

我们来分析一下这个gradle脚本:

  1. allprojects,应用范围包括项目根目录和模块子目录。
  2. checkstyle { … }是代码检测文件的配置信息,比如xml文件地址。
  3. enable_checkstyle是一个开关配置,可以在gradle.properties中配置:enable_checkstyle=true。
  4. tasks.whenTaskAdded表示当一个task被添加的时候,需要执行那些操作。这里我们判断当前的task是不是prepareReleaseDependencies,此时不关心是否开启了开关;或者当前任务是preBuild,并且开启了开关。
  5. 符合条件时,我们通过dependsOn来执行具体的依赖任务,这里的任务就是checkstyle。

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  7. Android(安卓)WebView 上传文件支持全解析
  8. 自定义弹窗的制作
  9. Android(安卓)集成支付宝SDK实现快捷支付--详解

随机推荐

  1. sql server2012附加数据库问题解决方法
  2. sql查询出各科成绩最好的学生信息
  3. sql 语句插入结果为select和值混合示例
  4. 用SQL语句查询数据库中某一字段下相同值
  5. 显示同一分组中的其他元素的sql语句
  6. SQL Server 2005降级到2000的正确操作步
  7. sqlserver存储过程语法详解
  8. 省市县三级联动的SQL语句
  9. SQL Server 2005 数据库转 SQL Server 20
  10. Sql中将datetime转换成字符串的方法(CONV