记Android开发中第一次整groovy插件

333 阅读2分钟
本次基于gradle-7.5尝试用单独项目来开发插件

首先我们创建一个工程“GradlePluginTest”,并等待创建完成

接着我们来创建插件项目,选择‘Java or Kotlin Library’并等待创建完成

  • 删除多余项,删除完成后如下图所示

  • 修改插件项目里的build.gradle文件

  • 创建插件测试类

完整文件如下:

plugins {
    id 'groovy'
    id 'maven-publish'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

sourceSets {
    main {
        java {
            srcDir 'src/main/groovy'
            //srcDir 'src/main/java'
            //srcDir 'src/main/kotlin'
        }
        resources {
            srcDir 'src/main/resources'
        }
    }
}

dependencies {
    implementation gradleApi()
    implementation localGroovy()

    implementation 'com.android.tools.build:gradle:4.1.0'
}

publishing{
    publications {
        maven(MavenPublication) {
            groupId = 'com.test.plugin'
            artifactId = 'test_plugin'
            version = '1.0.0'
            from components.java
        }
    }
    repositories {
        maven {
            url = layout.buildDirectory.dir('repo')
        }
        mavenLocal()
    }

}
  • 接下来我们要创建插件properties文件,这里的文件名要注意一下,后面我们需要用到。我们先来创建文件所属的文件夹,第一次创建文件夹

  • 第二次创建文件夹

  • 创建properties文件, 注意此时的文件名,后面有用

  • 此时执行publish Task任务,完成插件部署到本地的maven仓库

在项目中使用

  • 可以看到在'app'项目中没有引用的时候,在编译项目时,log日志里是不包含我们自定义插件里的输入日志

  • 我们来引用一下自定义的插件,首先在工程的build.gradle文件中添加如下代码
buildscript {
    repositories {
        google()
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.1"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"

        classpath 'com.test.plugin:test_plugin:1.0.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

  • 然后在'app'项目的build.gradle中添加如下引用代码, 此处plugins里面的 id 'com.test.gradle.id'就是前面提到的properties的文件名
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'com.test.gradle.id'
}

  • 接着我们再来编译一下项目,你会发现新大陆

至此我们自定义groovy插件算是大功告成了,这个时候可能会有人问,我们为啥要自定义插件?哈哈哈,你猜~

踩坑

  • Entry META-INF/gradle-plugins/com.test.gradle.id.properties is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.5/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.

解决方法是把插件项目里build.gradle文件中如下代码注释掉

sourceSets {
    main {
        java {
            srcDir 'src/main/groovy'
            //srcDir 'src/main/java'
            //srcDir 'src/main/kotlin'
        }
        resources {
            srcDir 'src/main/resources'
        }
    }
}
  • 如果上传成功,在工程的目录中没有出现‘build’文件,可以到项目所在的文件夹中去查看是否有此文件

如下图所示,代表插件上传本地成功


不足之处,请不吝指教。谢谢!!!