Gradle 自定义插件
1.新建项目
配置build.gradle
//使用官方的 `groovy` 插件
apply plugin: 'groovy'
//添加api依赖
dependencies {dependencyHandler ->
dependencyHandler .compile gradleApi()
dependencyHandler. compile localGroovy()
}
//添加当前使用的gradle版本为2.1.3
dependencies { DependencyHandler dependencyHandler ->
dependencyHandler.compile 'com.android.tools.build:gradle:2.1.3'
//dependencyHandler.compile fileTree()
}
创建资源
注意,红框内的两者名保持一致!
2.新建pluginLaunch类
class MyPluginLaunch implements Plugin<Project> {
/**
* 因为是遍历 List 顺序添加的,所以可以在 Plugin 中通过先后顺序一一添加
registerTransform 方法第二个参数是 dependsOn, 可以手动设置依赖关系
* @param project
*/
@Override
public void apply(Project project) {
ZDMLogger.i('Project enable MyPluginLaunch plugin')
project.extensions.create("ccjReleaseInfo",ReleaseInfoExtension) //创建扩展属性
project.tasks.create("ccjReleaseTask",ReleaseInfoTask) //创建自定义任务
}
}
3.新建自定义属性类Extension
该属性可以在gradle中直接使用类似于android{}
class ReleaseInfoExtension extends Extension {
String versionName
String versionCode
String versionInfo
String fileName
@Override
public String toString() {
return "ReleaseInfoExtension{" +
"versionName='" + versionName + '\'' +
", versionCode='" + versionCode + '\'' +
", versionInfo='" + versionInfo + '\'' +
", fileName='" + fileName + '\'' +
'}'
}
}
4.新建自定义Task
用来处理自定义属性ReleaseInfoExtension
中的变量
class ReleaseInfoTask extends DefaultTask{
ReleaseInfoTask() {
group='zdmrouter'
description='the realeaseInfo Task of zdm router'
mustRunAfter()
}
/**
* 在doFitst 和doLast中间执行
*/
@TaskAction
void doAction (){
updateInfo()
}
private void updateInfo(){
String versionCodeMsg=project.extensions.getByName("ccjReleaseInfo").versionCode //其中ccjReleaseInfo为在launcher中定义的变量
ZDMLogger.i( "ReleaseInfoTask.updateInfo.versionCodeMsg>>>>"+versionCodeMsg)
}
}
5.将plugin
发布到jcenter 或者自己搭建的服务器仓库地址.然后进行依赖
//在root项目中的dependencies中
classpath 'com.smzdm:zdm_router_register:1.1.0'
//然后,在使用的地方,;类似于依赖Android插件一样.依赖自己的插件
apply plugin: 'com.smzdm.android.router.register'
6.依赖完成后,可以在apply自定义插件的gradle中进行
配置自定义属性
ccjReleaseInfo {
versionName = "1.0"
versionCode = 1
versionInfo = "versionInfo>>ccjReleaseInfo"
}
运行自定义Task
gradle ccjReleaseTask
或者在gradle面板中直接调用