编译插桩之自定义gradle插件

562 阅读1分钟

创建自定义的gradle 插件

一、 创建Android Library

gradle 就是groovy 语言编写的

1.1 main 文件夹下创建groovy文件夹

除了src下的main目录和build.gradle 其他的都可以删了

1.2 创建groovy 文件

groovy 文件实现Plugin接口,并且实现apply()方法

package kpa.custom.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class CustomLogPlugin implements Plugin<Project> {
    void apply(Project project) {
        System.out.println("======CustomLogPlugin===")
    }
}

1.3 修改Library的build.gradle

apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
    implementation fileTree(dir: 'libs', includes: ['*.jar'])

    implementation gradleApi()
    implementation localGroovy()
    implementation 'com.android.tools.build:gradle:3.6.1'
}

group='danny.lifecycle.plugin'
version='1.0.0'
uploadArchives {
    repositories {
        mavenDeployer {
        //部署地址可以自己设置,既可以在本地,也可以在远程,这里设置为本地(项目根目录下的)
            repository(url: uri('../custom_log_repo'))
        }
    }
}

1.4 main文件夹下创建resources/META-INF/gradle-plugins路径, 创建properties文件, 命名格式:插件名称.peoperties

// 自定义日志插件(当然 名称自己随便定义啊)
custom.log.plugin.properties

1.5 编译

  • sync now 一下
  • 在右侧点击执行 gradle/tasks/upload/uploadArchives

可以看到在根目录下有一个custom_log_repo 文件,里面的就是我们插件的目标文件

1.6 测试

在app 的build.gradle 中引入我们自己的插件

....
//  properties 的文件名
apply plugin: 'custom.log.plugin' 
buildscript {
    repositories {
        google()
        jcenter()
        // 根目录下的地址
        maven { url '../custom_log_repo'}
    }
    dependencies {
    //group 值 + module 名 + version
        classpath 'kpa.custom.log.plugin:custom.log.plugin:1.0.0'
    }
}
android {
    ...

}
...

执行 ./gradlew clean assembkedebug 构建当前gradle

 CompileThePlugPile ./gradlew clean assembledebug

> Configure project :app
//此处便是我们插件中的打印
======CustomLogPlugin===

BUILD SUCCESSFUL in 24s
27 actionable tasks: 25 executed, 2 up-to-date

到此为止,完成了gradle 的自定义