AndroidStudio 自定义 Gradle Plugin

新建一个Groovy Module

AndroidStudio 没有找到直接创建 Groovy Module 的方法, 所以先创建一个Java or Kotlin Library

  • File --> New --> New Module --> Java or Kotlin Library
image.png

如上图, 创建了一个 com.demo.javaassist 的 Java or Kotlin Library 模块, 创建完成之后修改这个模块的build.gradle文件, 使其变成一个 Groovy Module 模块

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

dependencies {
    implementation gradleApi()
    implementation localGroovy()
    implementation 'com.android.tools.build:gradle:7.2.0'
}

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}
创建 groovy和resources/META-INF/gradle-plugins/package.properties 文件
image.png

如上图, 手动创建groovy目录和resources目录

创建Plugin插件入口文件

package com.demo.javaassist;
import org.gradle.api.Plugin;
import org.gradle.api.Project;

public class ModifyPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        System.out.println("ModifyPlugin apply 666666666666666666666");
    }
}

创建package.properties文件

implementation-class=模块包名.Plugin插件文件名字
implementation-class=com.demo.javaassist.ModifyPlugin

image.png

发布 Plugin 到本地 maven 仓库

在上面创建的 javaassist 模块的 build.gradle文件里面使用 publishing 发布

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

dependencies {
    implementation gradleApi()
    implementation localGroovy()
    implementation 'com.android.tools.build:gradle:7.2.0'
}

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

//发布 Plugin 到本地 maven 仓库
publishing {
    publications {
        maven(MavenPublication) {
            groupId = 'com.demo.javaassist'
            artifactId = 'modify'
            version = '1.0.0'

            from components.java
        }
    }

    repositories {
        maven {
            url = "../repo"
        }
    }
}

然后在 AndroidStudio 的 Terminal 运行 gradle 命令 ./gradlew publish

image.png

执行成功后, 会在项目里面自动生成一个repo文件目录, 里面包含Plugin插件的jar文件


image.png

在项目的其他模块引用这个 Plugin

在项目的 settings.gradle 文件里面新增内容, pluginManagement{} 必须放在最上面, 否则会报错

pluginManagement {
    repositories {
        maven { url('./repo') }
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}


rootProject.name = "AgeApp"
include ':app'
include ':javaassist'

在项目最外层的 build.gradle 文件引用插件

新增本地仓库 maven { url('./repo') }
新增 classpath 'com.demo.javaassist:modify:1.0.0'

buildscript {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        google()
        mavenCentral()
        maven { url('./repo') }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.0'
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0'
        classpath 'com.demo.javaassist:modify:1.0.0'
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        google()
        mavenCentral()
        maven { url "https://jitpack.io" }
        maven { url('./repo') }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

在需要使用的模块, 如app的 build.gradle 文件使用插件

apply plugin: 'com.demo.javaassist'

image.png
image.png

引用成功, 即可看见自定义Plugin中的打印信息.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。