把一些经常变化的配置放在Gradle内,达到变化时只修改Gradle文件,不去动其他文件,减少出错的概率目的
参考ShareSDK 的项目配置思路,实现我们自己的Gradle扩展配置
注:暂不涉及Gradle配置对象直间的值传递方案
结构
实现方案
- 插件定义:
`plugin-custom.properties 文件:
1 | implementation-class = com.company.plugin.CustomPlugin` |
说明:
文件名.properties 即插件id
,也是我们后面要引入时使用的id
类似于:apply plugin'com.android.applicaiton'
文件配置内容:指定具体插件实现类 com.company.plugin.CustomPlugin
自定义插件实现类:
CustomPlugin.groovy
1
2
3
4
5
6
7
8
9
10
11public class CustomPlugin implements Plugin<Project>{
void apply(Project project) {
//扩展属性定义
project.extensions.create('pluginSupport', TinkerConfigSupport)
// 应用 其他插件,以Tinker为例,等同于build.gradle应用
project.apply plugin: 'com.tencent.tinker.patch'
}
}扩展属性定义,由create指定,String类型
pluginSupport
1
project.extensions.create('pluginSupport', PluginConfig)
注意:子类属性必需初始化,否则异常
子属性定义及构造方法初始化属性
PluginConfig.groovy
1 | public class PluginConfig { |
插件build.gradle
配置
1 | //语法插件 |
两个重要方法1
2project.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 | buildscript{ |
扩展属性配置赋值,build.gradle文件:1
2
3
4pluginSupport{
booleanValue = true;
stringValue = "自定义插件扩展属性值"
}