美文网首页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