专栏首页Android原创写一个Gradle插件
原创

写一个Gradle插件

一、gradle插件在Android中的应用

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

apply plugin: 'com.android.application'

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

apply plugin: 'com.android.library'

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

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

如:

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文件中写入:

class HelloWorldPlugin implements Plugin<Project> {

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

apply plugin: HelloWorldPlugin

Gradle Console中可以看到:

在Gradle Console中输入

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

三、发布插件

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

1、创建独立插件项目

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

Java Library Module

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

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.groovy

代码如下:

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,输入内容,指明入口类:

implementation-class=com.andy.testplugin.HelloWorldPlugin

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

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

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

gradle任务栏

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

请在这里填写图片描述

5、使用插件

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

buildscript{
    repositories {
        maven{
            url uri('/Users/chenqidian/AndroidStudioProjects/MyApplication/repo/')
        }
    }

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

(2)应用插件

apply plugin: 'com.andy.testplugin' // 注意,这里的插件名是properties文件的文件名

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 现有项目接入Kotlin开发实战

    众所周知,Google强力推出了Kotlin作为Android开发的第一语言,那么我们现有用Java语言开发的项目,如何去接入Kotlin开发呢?

    Clayman Twinkle
  • 小程序开发踩坑指南

    小程序组件分为原生组件和非原生组件,原生组件属于客户端的组件,在WebView的渲染流程之外的,且层级在所有非原生组件之上(无论你如何改z-index都没用的)...

    Clayman Twinkle
  • Android OpenGL ES滤镜开发设计

    按照正常的Android OpenGL开发,一般只需引入两个“主角”:GLSurfaceView和Renderer。

    Clayman Twinkle
  • 聊聊skywalking的log4j2-activation

    skywalking-6.6.0/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activa...

    codecraft
  • 聊聊skywalking的log4j2-activation

    skywalking-6.6.0/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activa...

    codecraft
  • 码云周刊 | 面试之前,或许该高效率地学点干货!

    一周热门资讯回顾 1、程序员多大年纪算高龄,届时该何去何从? ? 随着年龄的增长,程序员会相对难以保持技能更新。许多人宁愿留在自己的舒适区,不冒任何风险。即使...

    码云Gitee
  • nginx架构模型分析

    Nginx由内核和模块组成,从官方文档http://nginx.org/en/docs/下的Modules reference可以看到一些比较重要的模块,一般分...

    苏先生
  • apollo配置动态更新

    一笠风雨任生平
  • 设计模式实战-命令模式

    命令模式(Command Pattern)又称为行动(Action)模式或交易(Transaction)模式。

    架构师修炼
  • 瀑布图

    今天要跟大家分享的图表是瀑布图! ▽▼▽ 瀑布图图在诸多图表中算是比较复杂的图表,因而在excel2013及以下版本中并没有办法直接制作,不过最近更新的exce...

    数据小磨坊

扫码关注云+社区

领取腾讯云代金券