时间:2021-05-19
缘由
首先说明一下为什么会有这篇文章。前段时间,插件化以及热修复的技术很热,Nuwa热修复的工具NuwaGradle,携程动态加载技术DynamicAPK,还有希望做最轻巧的插件化框架的Small。这三个App有一个共同的地方就是大量的使用了Gradle这个强大的构建工具,除了携程的框架外,另外两个都发布了独立的Gradle插件提供自动化构建插件,或者生成热修复的补丁。所以学习一下Gradle插件的编写还是一件十分有意义的事。
插件类型
Gradle的插件一般有这么几种:
Gradle相关语法
本篇文章不会详细说明Gradle相关的语法,如果要学习gradle相关的东西,请查看Gradle for Android
Gradle插件开发
Gradle插件是使用Groovy进行开发的,而Groovy其实是可以兼容Java的。Android Studio其实除了开发Android App外,完全可以胜任开发Gradle插件这一工作,下面来讲讲具体如何开发。
打开Module下的build.gradle文件,输入
apply plugin: 'groovy'apply plugin: 'maven'dependencies { compile gradleApi() compile localGroovy()}repositories { mavenCentral()}下面我们在包名下新建一个文件,命名为PluginImpl.groovy,注意有groovy后缀,然后在里面输入,注意包名替换为你自己的包名。
package cn.edu.zafu.gradleimport org.gradle.api.Pluginimport org.gradle.api.Projectpublic class PluginImpl implements Plugin<Project> { void apply(Project project) { project.task('testTask') << { println "Hello gradle plugin" } }}然后在resources/META-INF/gradle-plugins目录下新建一个properties文件,注意该文件的命名就是你只有使用插件的名字,这里命名为plugin.test.properties,在里面输入
implementation-class=cn.edu.zafu.gradle.PluginImpl注意包名需要替换为你自己的包名。
这样就完成了最简单的一个gradle插件,里面有一个叫testTask的Task,执行该task后会输出一段文字,就像当初我们输出HelloWorld一样。
发布到本地仓库
接着,我们需要将插件发布到maven中央仓库,我们将插件发布到本地仓库就好了,在module项目下的buidl.gradle文件中加入发布的代码。
repositories { mavenCentral()}group='cn.edu.zafu.gradle.plugin'version='1.0.0'uploadArchives { repositories { mavenDeployer { repository(url: uri('../repo')) } }}上面的group和version的定义会被使用,作为maven库的坐标的一部分,group会被作为坐标的groupId,version会被作为坐标的version,而坐标的artifactId组成即module名,我们让其取一个别名moduleName。然后maven本地仓库的目录就是当前项目目录下的repo目录。
这时候,右侧的gradle Toolbar就会在module下多出一个task
点击uploadArchives这个Task,就会在项目下多出一个repo目录,里面存着这个gradle插件。
目录就像上图这样,具体目录结构和你的包名等一系列有关,time是我的module名。
发布到本地maven仓库后,我们就使用它,在叫app的android项目下的gradle.build的文件中加入
buildscript { repositories { maven { url uri('../repo') } } dependencies { classpath 'cn.edu.zafu.gradle.plugin:time:1.0.0' }}apply plugin: 'plugin.test'apply plugin后面引号内的名字就是前文plugin.test.properties文件的文件名。而class path后面引号里的内容,就是上面grade中定义的group,version以及moduleName所共同决定的,和maven是一样的。
同步一下gradle,右侧app下other分类下就会多出一个testTask,双击执行这个Task,控制台就会输出刚才我们输入的字符串
发布到Jcenter仓库
接下来我们将其发布到jcenter中央仓库。
在项目根目录下的build.gradle文件中加入。
dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta6' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' classpath 'com.github.dcendents:android-maven-plugin:1.2' }在项目根路径下新建bintray.gradle文件,输入
apply plugin: 'com.jfrog.bintray'apply plugin: 'maven-publish'def projectName = "timePlugin"def mavenDesc = 'your desc'def baseUrl = 'https://github.com/yourBaseUrl'def siteUrl = baseUrldef gitUrl = "${baseUrl}/yourGitUrl"def issueUrl = "${baseUrl}/yourGitIssueUrl"def licenseIds = ['Apache-2.0']def licenseNames = ['The Apache Software License, Version 2.0']def licenseUrls = ['http://.edu.zafu.gradle.plugin:test:1.0.0' }}apply plugin: 'plugin.test'定义外部参数,这里我们定义了param1,param2,nestParam1,nestParam2,此外param3和nestParam3保持默认。
pluginExt { param1 = 'app param1' param2 = 'app param2' nestExt{ nestParam1='app nestParam1' nestParam2='app nestParam2' }}同步一下gradle,执行customTask。
上面的代码很简单,不用解释也能看到,所以不再解释了。
源码
最后上本篇文章的源码 :GradlePlugin_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Android中RxPermissions的使用方法详解以请求拍照、读取位置权限为例module的build.gradle:compile'com.tbruye
Google已经建议Android开发全部转向AndroidStudio开发,AndroidStudio是使用gradle编译、打包的,那么问题来了,gradl
前言在Android开发中我们一般需要在app里获取gradle里的配置信息:1.在程序里使用gradle里的配置项,2.在resouce里使用gradle里的
Gradle插件代码可以在build.gradle中,buildSrc项目中,以及独立的插件项目中编写。本文将介绍如何在一个独立的项目中使用Java语言编写Gr
AndroidListView之EfficientAdapte的使用详解在做Android手机应用开发时,ListView是一个非常常用的控件。如何更新的使用它