自定义Gradle插件,之扩展Gradle配置

把一些经常变化的配置放在Gradle内,达到变化时只修改Gradle文件,不去动其他文件,减少出错的概率目的
参考ShareSDK 的项目配置思路,实现我们自己的Gradle扩展配置

注:暂不涉及Gradle配置对象直间的值传递方案

结构

实现方案

  1. 插件定义:
    `plugin-custom.properties 文件:
1
implementation-class = com.company.plugin.CustomPlugin`

说明:

文件名.properties 即插件id,也是我们后面要引入时使用的id

类似于:apply plugin'com.android.applicaiton'

文件配置内容:指定具体插件实现类 com.company.plugin.CustomPlugin

  1. 自定义插件实现类:
    CustomPlugin.groovy

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class CustomPlugin implements Plugin<Project>{

    @Override
    void apply(Project project) {

    //扩展属性定义
    project.extensions.create('pluginSupport', TinkerConfigSupport)
    // 应用 其他插件,以Tinker为例,等同于build.gradle应用
    project.apply plugin: 'com.tencent.tinker.patch'
    }
    }
  2. 扩展属性定义,由create指定,String类型
    pluginSupport

    1
    project.extensions.create('pluginSupport', PluginConfig)

注意:子类属性必需初始化,否则异常

子属性定义及构造方法初始化属性

PluginConfig.groovy

1
2
3
4
5
6
7
8
9
10
public class PluginConfig {

boolean booleanValue

String stringValue

PluginConfig() {
booleanValue = false
stringValue = ""
}

插件build.gradle配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//语法插件
apply plugin: 'groovy'
dependencies {
//语法支持
compile gradleApi()
compile localGroovy()
//插件支持
compile 'com.google.gradle:osdetector-gradle-plugin:1.2.1'
compile 'com.android.tools.build:gradle:2.1.0'

}

sourceSets {
main {
groovy {
srcDir 'src/main/groovy'
}

resources {
srcDir 'src/main/resources'
}
}
}

两个重要方法

1
2
project.afterEvaluate 解析gradle配置文件之后执行
project.beforeEvaluate 解析之前执行

发布

注:发布目录根据需要修改

插件buidl.gradle配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//发布插件
apply plugin: 'maven'

uploadArchives {
repositories {
mavenDeployer {
//设置插件的GAV参数
pom.groupId = 'groupId'
pom.artifactId = 'artifactId'
pom.version = 1.0//指定版本号
//文件发布到本地目录
repository(url: uri('../plugin'))
}
}
}

配置完成后执行(Terminal也可):
Gradle->build->uploadArchives

使用

需要引入的modulebuild.gradle文件,添加如下代码即可完成引入:

1
2
3
4
5
6
buildscript{
dependencies{
classpath 'groupId:artifactId:1.0'
}
}
apply plugin: 'plugin-custom'

扩展属性配置赋值,build.gradle文件:

1
2
3
4
pluginSupport{
booleanValue = true;
stringValue = "自定义插件扩展属性值"
}

参考

完结撒花