写一个Gradle插件

2019-04-01 12:53:33 浏览数 (1)

一、gradle插件在Android中的应用

我们在Android Studio中创建的app项目中,build.gradle常有如下这行代码:

代码语言:txt复制
apply plugin: 'com.android.application'

或是作为一个Android Library Module时,build.gradle会有如下这行代码:

代码语言:txt复制
apply plugin: 'com.android.library'

这就是gradle插件应用的例子。

apply plugin: 'xxx'代表着在这个所在的gradle文件中应用了插件'xxx',那么在这个文件里,你就可以使用这个插件所提供的功能了。

如:

代码语言:txt复制
apply plugin: 'com.android.application'
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.example.chenqidian.myapplication"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

二、开发一个插件

gradle插件开发使用的语言是Groovy(一种跑在jvm上的编程语言)。

build.gradle文件中写入:

代码语言:txt复制
class HelloWorldPlugin implements Plugin<Project> {

    @Override
    void apply(Project target) {
        println "Hello World"
    }
}

apply plugin: HelloWorldPlugin

Gradle Console中可以看到:

在Gradle Console中输入在Gradle Console中输入

ok,这个就是我们实现的一个插件了。

三、发布插件

上面的话,插件类是写在了gradle文件中的,作为正式给别人使用的插件来讲的化,正确做法将代码作为一个独立的插件项目,然后打包成一个jar包来发布的。

1、创建独立插件项目

这里以Android Studio为例,创建一个Java Library目录。

Java Library ModuleJava Library Module

修改build.gradle文件,让module支持使用groovy和提供打包上传能力。

代码语言:txt复制
apply plugin: 'groovy'
apply plugin: 'maven'
uploadArchives{
    // 将本地目录作为maven仓库
    repositories{
        mavenDeployer {
            repository(url: uri('../repo'))
        }
    }
}
group = "com.andy"
version = "1.0"
dependencies {
    compile gradleApi()
}

2、编写插件代码

src/main/groovy/文件夹(没有文件夹需要新建)中新增HelloWorldPlugin.groovy文件

HelloWorldPlugin.groovyHelloWorldPlugin.groovy

代码如下:

代码语言:txt复制
package com.andy.testplugin

import org.gradle.api.Plugin
import org.gradle.api.Project

class HelloWorldPlugin implements Plugin<Project> {

    @Override
    void apply(Project target) {
        println "Hello World"
    }
}

3、编写properties文件

src/main/resources/META-INF/gradle-plugins文件夹(没有文件夹需要新建)中新增com.andy.testplugin.properties,输入内容,指明入口类:

代码语言:txt复制
implementation-class=com.andy.testplugin.HelloWorldPlugin

4、执行打包上传插件jar包

可以直接在插件项目目录中执行gradle uploadArchives打包命令;

或者在Android Studio可视化gradle任务栏中执行,如下图所示:

gradle任务栏gradle任务栏

打包执行成功后,可以在目录中看到这些文件,如下图:

请在这里填写图片描述请在这里填写图片描述

5、使用插件

(1)导入maven本地仓库,依赖类路径

代码语言:txt复制
buildscript{
    repositories {
        maven{
            url uri('/Users/chenqidian/AndroidStudioProjects/MyApplication/repo/')
        }
    }

    dependencies {
        classpath 'com.andy:HelloWorld:1.0' // 注意这里是 group : module名字 : 版本号,插件打包时配置好的
    }
}

(2)应用插件

代码语言:txt复制
apply plugin: 'com.andy.testplugin' // 注意,这里的插件名是properties文件的文件名

0 人点赞