插件的概念
Gradle自身提供了根本的概念和 核心框架,这两样东西,完全不涉及到 事务内容,它们只提供事务可能用到的抽象过程,而事务内容(涉及到实在运用场景的逻辑性质的代码)悉数以外来扩展插件的方法完成。Gradle自身内置了一些常用插件,他们根本上能协助咱们处理大部分场景,但是也有破例,有些插件需求咱们手动去开发,乃至发布。
插件的作用
上面说过,插件是核心模块的扩展。咱们将一个gradle plugin运用到咱们的项目中之后,能够帮咱们处理构建过程中的许多工作,举个例子:
-
增加扩展属性
android{} 内部诸多的装备项,便是
com.android.tools.build:gradle
插件为project对象(gradle默许的顶层对象)增加的一个扩展,咱们在android{}中指定sdk版别以及其他参数 -
增加新的task到你已有的task列表中
增加自定义的task,然后与已有任务挂钩,是十分基础的改变打包流程的做法。
-
增加依靠装备
当咱们编译项目时,假如需求用到第三方依靠,gradle插件能够协助咱们设定第三方依靠库的地址
-
预设约定
比方咱们的java源代码的方位,默许便是src/main/java,假如咱们想把其他某些当地的java文件也打成class,dex到终究的apk内部,也能用插件来做到。
怎么运用插件
假如有一个新的插件,咱们希望它在咱们的项目中发挥作用,应该怎么做?
首要来看看插件的分类:
二进制插件
二进制插件有几个要素:
- 完成 org.gradle.api.Plugin接口
- 进行大局id的注册
它的实质是一个jar包,内部包含了插件逻辑,可编写的语言包含 java, kotlin以及groovy,
假如咱们完成了一个二进制插件,完整类名为:com.test.my.MyPlugin,那么运用它的写法为:
apply plugin: ‘com.test.my.MyPlugin’
有必要确保完整类名大局唯一。
脚本插件
脚本插件,则是 以纯 gradle文件的方法表现的 插件逻辑。
比方,咱们设定了一个version.gradle
用于保存一切的版别号:
// ext是rootProject的成员属性,
// 留意,一切的gradle文件都默许引用了 大局的rootProject
ext {
versionName = '1.0.0'
versionCode = 100
}
那么,咱们在同级目录下的build.gradle文件中则能够直接这么用:
相对路径的写法:
apply from: "../version.gradle"
或者 用 rootProject对象来获取文件:
apply from: rootProject.file('version.gradle')
总是便是让当时的build.gradle引用到 其他方位的gradle文件,类似 java的import操作。
相同,假如是网络上的 gradle文件,则能够直接运用:
apply from: 'https://example.com/version.gradle'
apply的多种用法
map方法
剖析刚才的 apply from的写法,其实后面的 from:'xxxx'
是一个 Map的写法,方法的原型是:
void apply(Map<String, ?> options);
闭包方法
还有闭包的写法:
apply {
from '../version.gradle'
}
它的原型则是:
void apply(Closure closure)
另外,还有 action的写法:
action方法
void apply(Action<? super ObjectConfigurationAction> action);
详细写法为:
apply (new Action<ObjectConfigurationAction>() {
@Override
void execute(ObjectConfigurationAction objectConfigurationAction) {
objectConfigurationAction.from('../version.gradle')
}
})
以上三种写法作用同等。
运用第三方插件
常规方法
第三方发布的二进制插件,咱们有必要在 运用之前先下载它的下载库房,方位在 大局的build.gradle
中:
比方:
buildscript {
repositories {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0'
}
}
比方上面的写法,buildScript装备,便是装备了 远程库房地址为:google()
. 实际地址为:https://dl.google.com/dl/android/maven2/
然后设定要运用的插件的 DSL参数,包含 group
,name
,以及version
,别离对应上面的:com.android.tools.build
, gradle
, 4.0.0
这3个。
除此之外,还有另外一种写法:
运用plugins DSL
plugins {
id 'com.android.tools.build:gradle' version '4.0.0'
}
作用同等。
有必要留意的是
假如是要apply一个官方库房的插件的话,前面 buildScript 的装备能够不写,因为内置了,官方插件库房的地址是:https://plugins.gradle.org/
,许多优异的插件,好用的轮子,能够直接找到而不需求自己开发,这便是gradle的生态。