Gradle插件开发

674 阅读2分钟

Gradle插件

二进制插件使用

一:声明插件

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        //声明插件ID与版本号
        classpath "com.android.tools.build:gradle:4.1.3"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

二:应用插件

//应用插件
plugins {
    id 'com.android.application'
}

三:配置插件

//配置插件
android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    viewBinding {
        enabled = true
    }

    defaultConfig {
        applicationId "com.microli.demo"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

脚本插件使用

一:在根目录定义other.gradle

println("我是 插件代码")

二:在build.gradle中调用

println("我是 主工程代码")

apply from:project.rootProject.file("other.gradle")

三:运行./gradlew clean -q

我是 主工程代码
我是 插件代码

自定义简单插件

一:在build.gradle添加

class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.task('hello') {
            doLast {
                println 'Hello from the GreetingPlugin'
            }
        }
    }
}

// Apply the plugin
apply plugin: GreetingPlugin

二:执行./gradlew -q hello

Hello from the GreetingPlugin

二进制插件开发

插件工程建立

一:建立buildSrc子工程

1:建立如何目录的子工程

image.png

2:在build.gradle中添加如下代码

// 引用groovy插件,编译插件工程中的代码
apply plugin: 'groovy'

// 声明仓库的地址
repositories {
    google()
    jcenter()
}

// 声明依赖的包
dependencies {
    implementation gradleApi()
    implementation localGroovy()
}

二:建立插件运行入口

image.png

implementation-class=com.router.demo.gradle.RouterPlugin

三:实现插件逻辑

package com.router.demo.gradle

import org.gradle.api.Plugin
import org.gradle.api.Project

class RouterPlugin implements Plugin<Project> {

    //实现apply方法,注入插件的逻辑
    @Override
    void apply(Project project) {
        println("我来自于 routerPlugin, apply from ${project.name}")

        project.getExtensions().create("router", RouterExtension)

        project.afterEvaluate {
            RouterExtension routerExtension = project["router"]

            println("用户设置的wiki路径:${routerExtension.wikiDir}")
        }
    }
}

参数配置

一:定义Extensition

package com.router.demo.gradle

class RouterExtension {
    String wikiDir;
}

二:注册Extensition

project.getExtensions().create("router", RouterExtension)

三:使用Extensition

router {
    wikiDir getRootDir().absolutePath
}

四:获取Extensition

project.afterEvaluate {
    RouterExtension routerExtension = project["router"]

    println("用户设置的wiki路径:${routerExtension.wikiDir}")
}

插件发布

一:在build.gradle 中添加下面的代码。

// 调用maven插件,用于发布
apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            // 设置发布路径为 工程目录下面的repo文件件
            repository(url: uri('../repo')) {
                // 设置groupId 通常为报名
                pom.groupId = 'com.router.demo'
                // 设置artifactId, 为当前插件的名称
                pom.artifactId = 'router-gradle-plugin'
                // 设置 插件的版本号
                pom.version = '1.0.0'
            }
        }
    }
}

二:将buildSrc 拷贝出来,执行cp -rf buildSrc router-gradle-plugin

三:点击uploadArchives

image.png

Demo

github.com/shizhongyu/…

参考:

Developing Custom Gradle Plugins