美文网首页android基础架构
Gradle Plugin 简单使用与调试

Gradle Plugin 简单使用与调试

作者: ben大福 | 来源:发表于2020-06-20 07:16 被阅读0次

1.概况

gradle plugin有很多种写法,这里只介绍最常用的使用方法
步骤:
1,独立项目编译plugin至maven仓库
2,用户通过 apply plugin的方式使用plugin

环境:
gradle版本使用的是4.0.0

2.介绍

步骤:
1,创建一个空项目,创建一个空mudule(作为我们的plugin项目)
2,删除无用的mudule内容,目录结构为:

└── build.gradle
│
└── src
    └── main
        ├── groovy
        │       └── 包名+plugin内容
        └── resources
                └── META-INF
                        └── gradle-plugins
                                └── 你plugin名字.properties

TIPS:下面假设plugin名字为doubleTap

doubleTap.properties

内容为:

implementation-class=com.zhumingwei.doubletap.DoubleTapPlugin

只有一行内容,后面跟着pluginClass的全路径类名

3,创建pluginClass

在你的groovy包下创建你的pluginClass,java和grovvy都可以。(网上很多说只能创建groovy文件,但是笔主实测发现java类也可以用的)
内容为

import org.gradle.api.Plugin;
import org.gradle.api.Project;
public class DoubleTapPlugin implements Plugin<Project> {
    private static final String EXT_NAME = "doubleTab";

    @Override
    public void apply(Project project) {
      System.out.println("hello plugin");  
    }
}

4,打包至本地maven

在plugin module中的bulid.gradle中,使用 maven 模块

apply plugin: 'maven'
def sonatypeRepositoryUrl = "file://" + rootDir.absolutePath + "/.repo"  // 文件路径自己随便定
artifacts {
    archives sourcesJar
}

afterEvaluate { project ->
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    uploadArchives {
        repositories {
            mavenDeployer {
                pom.groupId = nexus_groupId
                pom.artifactId = nexus_artifactId
                pom.packaging = 'aar'
                pom.name = nexus_fileName
                pom.version = nexus_versionName + '-SNAPSHOT'

                repository(url: sonatypeRepositoryUrl) {
                    try {
                        authentication(userName: properties.getProperty("userName"), password: properties.getProperty("password"))
                    } catch (Exception e) {
                        println(e.getMessage())
                    }
                }

            }
        }
    }
}

nexus_versionName=0.1.5
nexus_artifactId=double_tap_plugin
nexus_groupId=com.zhumingwei.doubleTap
nexus_fileName=double_tap_plugin

详细maven配置可以查看文档 :https://docs.gradle.org/current/userguide/maven_plugin.html

上面的配置代码添加后,gradle 会出现 uploadArcheives的Task


image.png

运行它会发现我在根目录出现了一个.repo文件夹,目录就是前面代码配置的sonatypeRepositoryUrl路径

5.应用

在主工程build.gradle中

添加maven仓库

repositories {
        maven {
            url "file://${rootDir.absolutePath}/.repo"
        }
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"
        classpath 'com.zhumingwei.doubleTap:double_tap_plugin:0.1.5-SNAPSHOT' //这里对应上面发布maven的时候配置的参数
    }

在 app/build.gradle添加

 apply plugin: 'doubleTap'

接下载build一下工程就会发现,log 出现 “hello plugin” 说明plugin创建成功

调试

参考:https://juejin.im/post/5dc8d947e51d455523170b7f
TIPS:
1,如果transform无法调试,执行一遍clean就可以调试了
2,命令行使用:./gradlew <任务名> -Dorg.gradle.daemon=false -Dorg.gradle.debug=true

注册transform

在apply方法中添加代码

    boolean isApp = project.getPlugins().hasPlugin(AppPlugin.class);
        if (!isApp) {
            throw new GradleException(" this plugin is not application");
        }
        AppExtension appExtension = project.getExtensions().getByType(AppExtension.class);
        appExtension.registerTransform(new 我的Transform());

注册transform

相关文章

网友评论

    本文标题:Gradle Plugin 简单使用与调试

    本文链接:https://www.haomeiwen.com/subject/rzzixktx.html