Android Gradle 学习笔记(六):Gradle 插件

Gradle 自己提供了一些基本的概念和总体核心的框架,其余用于描述真实使用场景的均可以经过插件扩展的方式来实现。这样就能够经过抽象的方式提供一个核心的框架,其余具体的功能和业务都经过插件扩展的方式来实现。java

Gradle 内置了不少经常使用的插件,基本知足大部分工做,可是也有一些插件是没有内置的,这时候就须要咱们扩展示有插件或者自定义插件来达到咱们的目的。好比 Android Gradle 插件就是基于内置的Java插件实现的。android

1、插件的做用

插件会扩展项目的功能,帮助咱们在项目的构建的过程当中作不少事情:api

  • 能够添加任务到项目中,帮助完成诸如 测试、编译、打包等事情。
  • 能够添加依赖配置到项目中,经过它们来配置咱们在构建过程当中的依赖。
  • 能够向项目中现有的对象类型添加新的扩展属性、方法等,可使用它们来配置优化构建。例如:android{}这个配置块就是Android Gradle插件为Project对象添加的一个扩展。
  • 能够对项目进行一些约定,好比应用Java插件后,能够约定src/main/java目录下是咱们的源代码的存放地址,在编译的时候也是编译这个目录下的Java源代码文件。

这就是插件,咱们只须要按照它约定的方式,使用它提供的任务、方法或者扩展,就能够对咱们的项目进行构建。网络

2、如何应用插件

插件的应用都是经过Project.apply()方法完成的。apply有好几种用法,而且插件也分为二进制插件和脚本插件。下面咱们分别介绍一下:app

1. 应用二进制插件

二进制插件就是实现了org.gradle.api.Plugin接口的插件,它们能够有plugin id。框架

举例:下面咱们看一下如何应用一个Java插件:maven

apply plugin:'java'

使用上面的语句就能够把java插件应用到咱们的项目中了,其中‘java’就是Java插件的plugin id,它是惟一的。模块化

2. 应用脚本插件

脚本插件的使用方式以下例所示:工具

build.gradle:单元测试

apply from:'version.gradle'

task outVersion {

    println("APP版本是:${versionName},版本号是:${versionCode}")
    
}

version.gradle:

ext {
    versionName = '1.3.0'
    versionCode = 1
}

容许结果以下:

renhui$ gradle outVersion

> Configure project :
APP版本是:1.3.0,版本号是:1

BUILD SUCCESSFUL in 0s

应用脚本插件,其实就是把脚本加载进来,和二进制插件不一样的是它使用的是from关键字,后面紧跟着一个脚本文件(能够是本地文件,也能够是网络文件)。

脚本插件能帮助咱们把较大较复杂的脚本文件进行分块、分段整理,它是脚本文件模块化的基础。

3. 应用第三方发布的插件

第三方发布的做为jar的二进制插件,咱们在应用的时候,必需要在buildscript{}里面配置其classpath才能使用,这个不像Gradle为咱们内置的插件。

好比咱们的Android Gradle插件就属于Android发布的第三方插件,若是咱们要使用它就要先配置,示例以下:

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

buildscript{}块是一个在构建项目以前,为项目进行前期准备和初始化相关配置依赖的地方,配置好所需的依赖,就能够应用其提供的插件了。

下面是在app层应用android gradle插件的方式:

apply plugin: 'com.android.application'

若是没有提早在buildscript里配置依赖的classpath,则会报错,提示找不到这个插件。

3、Java Gradle 插件

使用Java Gradle插件咱们可以很轻松的构建出一个项目,咱们经常使用的方式就是使用简称应用Java Gradle插件:

apply plugin: 'java'

经过以上的配置,Java插件会为工程添加不少有用的默认设置和约定,好比源代码的位置,单元测试代码的位置、资源文件的位置等。

做为Java项目,咱们不可避免的会依赖不少第三方的Jar,这也是值得提倡的,由于有不少开源的工具和框架可以帮助咱们更加高效的开发。下面咱们就讲一下如何配置第三方依赖。

1. 配置第三方依赖

想要使用这些第三方依赖,就须要告诉Gradle如何找到这些依赖,也就是咱们要讲的依赖配置。

通常状况下咱们都是从仓库中查找咱们须要的Jar包,在Gradle中要配置一个仓库的Jar依赖,首先咱们得告诉Gradle咱们要是有什么类型的仓库,这些仓库的位置在哪里,这样Gradle就知道从哪里去搜寻咱们依赖的Jar,例如:

respositories {
    mavenCentral()
}

以上代码,咱们配置了一个Maven中心库,告诉Gradle能够在Maven中心库中搜寻咱们依赖的Jar,除此以外,咱们也能够从jcenter库、ivy库、本地Maven库mavenLocal等中搜寻。因而可知,Gradle支持的仓库很是丰富,也能够多个仓库一块儿使用。好比一些公共的开源框架能够从mavenCenteral上下载,一些咱们公司私有的Jar能够在本身搭建的Maven私服上下载:

respositories {
    mavenCentral()
    maven {
         url 'http://www.mavenurl.com'
    }
}

有了仓库,咱们就能够经过配置告诉Gradle,咱们须要依赖什么,例如:

dependencies {
     compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.0.1'    
}

在上面的例子中,咱们配置了一个okhttp的依赖,其中compile是依赖名称,它的意思表示咱们在编译Java源文件时须要依赖okttp,并提供了GAV信息。

可是相对来讲,上面的写法仍是稍显麻烦的,Gradle为咱们提供了简写的方式:

dependencies {
     compile 'com.squareup.okhttp3:okhttp:3.0.1'    
}

2. 配置项目&文件依赖

除了咱们在上面提到的仓库的三方依赖,咱们还能够进行项目的依赖以及文件的依赖。

项目依赖示例:

dependencies {
     compile project(':example')    
}

依赖后,此项目中的Java等类就能够进行使用了,就像使用本身项目中的类同样。

文件依赖,通常是依赖一个jar包(出于某些缘由,不能将jar发布到Maven中心库中,只能放在项目中),例如:

dependencies {
     compile files('libs/example')    
}

经过上面的配置,咱们就能成功引入这两个Jar包了。

但有时候,libs文件里的类太多了,不能一个个写,这时候咱们就能够经过如下的方式配置:

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

这样配置后,libs下的文件夹的扩展名为jar的都会被依赖,很是方便。

相关文章
相关标签/搜索