close
当前位置: 物联网在线 > 技术文库 > android >

用AndroidStudio开发自定义 Gradle plugin

利用AndroidStudio,编写自定义Gradle plugin

MavenDeployer 发布plugin

使用Gradle plugin

简介

项目中引入自定义Gradle plugin一般有三种方法: 

直接写在 build.gradle中.

plugin源码放到rootProjectDir/buildSrc/src/main/groovy目录下

plugin打包成jar, 发布到maven仓库, 然后项目通过Build Script依赖jar的形式引入

下面介绍的是第3种自定义Gradle插件的方式.

一. 用AndroidStudio中写plugin 1.新建一个Android工程 2.在这个工程里面,新建一个Android Library

先起名叫cooker-plugin吧, 我们将会用这个library写Gradle plugin

用AndroidStudio开发自定义 Gradle plugin

3.建立plugin的目录结构

把这个cooker-plugin中默认产生的文件都删除, 然后按照下面结构新建文件

用AndroidStudio开发自定义 Gradle plugin

解释

1.因为我们用Groovy写的插件, 插件代码放在 src/main/groovy下

2.在src/main/resources/META-INF/gradle-plugins 里声明plugin信息

比如:新建 cooker-plugin.properties 文件,内容如下 

implementation-class=com.helen.plugin.CookerPlugin

这里:

"cooker-plugin" 是插件名称;

"com.helen.plugin.CookerPlugin" 是对应的插件实现类 

3.build.gradle 声明用groovy开发

apply plugin: 'groovy' dependencies { compile gradleApi() compile localGroovy() } repositories { mavenCentral() } 4.实现插件

实现plugin,其实就是需要继承实现Plugin  的接口 

package com.helen.plugin import org.gradle.api.Plugin import org.gradle.api.Project public class CookerPlugin implements Plugin<Project> { void apply(Project project) { //这里实现plugin的逻辑 //巴拉巴拉巴拉 println "hello, this is cooker plugin!" //cooker-plugin //比如这里加一个简单的task project.task('cooker-test-task') << { println "hello, this is cooker test task!" } } } 5.一个简单的plugin就写好了

在cooker-plugin项目中, build一下.

就能在build/libs下生成对应的plugin插件了

用AndroidStudio开发自定义 Gradle plugin

这个插件就能使用了. 可以发布在本地仓库或者Maven仓库.

二. mavenDeployer发布插件

下面介绍一下利用mavenDeployer发布在本地仓库.

1. 引入 mavenDeplayer插件

修改cooker-plugin的build.gradle, 修改后如下:

apply plugin: 'groovy' //添加maven plugin, 用于发布我们的jar apply plugin: 'maven' dependencies { compile gradleApi() compile localGroovy() } repositories { mavenCentral() } //设置maven deployer uploadArchives { repositories { mavenDeployer { //设置插件的GAV参数 pom.groupId = 'com.helen.plugin' pom.artifactId = 'cooker-plugin' pom.version = 1.0 //文件发布到下面目录 repository(url: uri('../release')) } } } 2.用uploadArchices发布

运行uploadArchives. 就能在设置的仓库路径中生成 cooker-plugin了

用AndroidStudio开发自定义 Gradle plugin

三. 使用gradle plugin 1.在build.gradle引入 cooker-plugin apply plugin: 'com.android.application' //使用cooker-plugin apply plugin: 'cooker-plugin' buildscript { repositories { maven { //cooker-plugin 所在的仓库 //这里是发布在本地文件夹了 url uri('../release') } } dependencies { //引入cooker-plugin classpath 'com.helen.plugin:cooker-plugin:1.0' } } 2. 我们编译App的时候,cooker-plugin就会介入了

每次clean/build时, 在Gradle Console可以看到我们的log

hello, this is cooker plugin!

Configuration on demand is an incubating feature. hello, this is cooker plugin! Incremental java compilation is an incubating feature. :app:preBuild UP-TO-DATE 3.使用cooker-plugin中定义的task

前面demo中, 我们新建了一个task: cooker-test-task , 他简单输出一句log.下面测试运行一下这个task.

在控制台输入  gradle cooker-test-task 运行结果如下 

用AndroidStudio开发自定义 Gradle plugin

四. 总结

Demo地址-Github : 

https://github.com/helen-x/gradle-plugin-demo

到此为止, 自定义Gradle plugin就介绍完了.

结合AndroidStudio, 自定义Gradle plugin可以完成很多功能. 

比如cooker的plugin完成了:

1)添加编译依赖

2)进行Aspecj编译

3)自动生成混淆配置


(责任编辑:ioter)

用户喜欢...

Android Weekly #276 安卓开发周刊 中文版

您是否了解过Android的Lifecycle-Aware库?(android.jlelse.eu) 我们如何了解Lifecycle-Aware库代码? Nishant Srivastava展示了可以跟踪活动或Lifecycle-Aware的Lifecycle Arch组件的片段,并相应地调整其行为。 为Mos...


Android Weekly #275 安卓开发周刊 中文版

MapMe — Android地图适配器 (medium.com) Josh Burton介绍MapMe,是一个用Kotlin编写的Android库,可以将适配器模式带到地图上。 赞助 CloudRail - 连接到API 10x更快 (cloudrail.com) 当我们用单一的界面连接到所...


使用Android Studio开发可独立运行(runnable)混淆过的Jar程序

之前开发Java程序一直都是使用Eclipse 开发Jar程序,现在开发基本上都已经弃用Eclipse了,但是有时偶尔开发个小的Jar程序,还要切换回去好麻烦,刚好前几天有人问几个相关的问题,就顺便整...


Android Weekly #274 安卓开发周刊 中文版

探索Android Oreo上的别后执行限制(medium.com) 在这篇文章中,Joe Birch解释了关于Android Oreo在后台运行服务的变化。 non-Time领主的time – 第5部分 (blog.stylingandroid.com) Mark Allison继续分析JSR 310 date和...


Android Weekly #273 安卓开发周刊 中文版

开源你的Android代码(android.jlelse.eu) 通过您的开源Android代码,您将(希望地)为Android社区提供有价值的代码,收到建设性的反馈,并与您最初建立的内容进行协作从而使您的代码变得更好。这...


Android Weekly #272 安卓开发周刊 中文版

Android Dev 101:每个初学者都应该知道的一些做法() 看一些初学者或媒介等级开发人员(不要错过任何人)应该知道的一些做法,以便更好地摆脱Android框架。 99.9% crash free sessions (medium.com) Chr...


Android Weekly #271 安卓开发周刊 中文版

依赖注入检查(medium.com) 在本文中,MihályNagy引入了依赖注入检查,一种开源注释处理器,可帮助您解决一些出现在所有JSR 330 DI库中常见的问题。 使用Android Studio插件提高效率 (blog.mindorks.com...


Android Weekly #270 安卓开发周刊 中文版

带有RxJava2的SOLID Android分析 (medium.com) 在这篇文章中,Aris Papadopoulos将解释如何正确创建一个分析系统,同时遵循SOLID原则,并使用RxJava2来解决问题。 (blog.stylingandroid.com) Java中的编程时间很难...


Android Weekly #269 安卓开发周刊 中文版

在Google上快速提出操作 () Wolfram Rittmeyer分享了开始在Google上快速创建操作所需的所有信息(为了家庭与助理)。 RxJava中的错误处理(rongi.github.io) 一旦开始编写RxJava代码,你就会意识到有些事...


Android Weekly #268 安卓开发周刊 中文版

Unity和Android - 连接点(android.jlelse.eu) Andreas Vourkos解释了使用Unity创建的Android应用程序的架构,以及如何使用WindowManager和不同类型的Windows来克服Unity 5.6发行版创建的问题。 Android上的蓝牙低功耗...