天天看點

Gradle 自定義插件Gradle 自定義插件

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()
}




           

建立資源

注意,紅框内的兩者名保持一緻!

Gradle 自定義插件Gradle 自定義插件

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

該屬性可以在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面闆中直接調用

Gradle 自定義插件Gradle 自定義插件

繼續閱讀