Gradle 自定義插件
官方原文 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()
}
建立資源
注意,紅框内的兩者名保持一緻!

image.png
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
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 或者自己搭建的伺服器倉庫位址.然後進行依賴
plugin
//在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面闆中直接調用