最近一直在深挖Android Gradle的学习,发现其实所谓的Android Gradle也不过就是一个gradle插件,所以如果能学好gradle的开发,我们就可以利用Gradle为我们做很多事,比如干预Android的打包,打出我们想要地apk或者jar,再或者多渠道设置等等。
建立插件工程
如果想实现对Gradle的开发,肯定需要一个开发Gradle的工程,这个我们可以直接使用Android Studio即可,对于Gradle工程的建立,网上主要有两种方式
buildSrc
直接在AndroidStudio中建立一个文件夹buildSrc,然后添加src文件夹和build.gradle
文件,如下图所示:
在src文件夹中建立main/groovy ,main/resources
这时就可以发现当前的结构有些类似Android的开发结构了。不同的只是将java换成了groovy,这是当然了,毕竟用groovy开发,如果对groovy还不太熟悉的同学,可以参考我之前的文章 Groovy基础知识
在
build.gradle
中添加如下代码:
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
这样我们就可以在groovy文件夹中添加对应代码进行gradle开发了。
java Library
第二种方式可以使用新建一个Java Library的形式:
这里注意是Java Library不是android的 Library
我们暂时起名glib
,工程如下图所示:
这样的工程暂时还是不能使用的,我们需要做一些修改。
首先是修改gradle文件:
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
然后删除java文件夹,建立groovy文件夹,以及resources文件夹,如下图所示:
区别
使用buildSrc可以在该Project中的任何module中直接使用,如果使用新建的Java Library的形式,需要上传Gradle插件到本地代码库,这个后面再说,所以下面的例子我们先以buildSrc的方式进行介绍
插件测试
groovy新建一个TestPlugin.groovy文件(注意后缀一定要是groovy):
public class TestPlugin implements Plugin {
@Override
void apply(Project project) {
println("aaaaaa")
}
}
gradle插件都需要在build.gradle中apply,如:apply plugin: 'com.android.application'
所以他需要有一个对外的名字,这就需要resources下的文件起作用了。
在resources文件夹下建立META-INF/gradle-plugins
:
然后在这个文件夹下建一个
properties
文件,这个文件的名字就是对外的名字,所以起的时候要慎重,我们暂时叫
hhh.properties
,名字特殊一点容易看出来。
文件内容如下:
implementation-class=TestPlugin
然后我们利用Android Studio自带的app module做个测试:
然后执行打包可以发现输出中:
上传到本地仓库
上面提到了如果使用java Library,需要上传到本地仓库才能引用,现在就需要介绍一下如何进行操作
首先需要修改build.gradle文件:
apply plugin: 'groovy'
apply plugin: "maven"
dependencies {
compile gradleApi()
compile localGroovy()
}
uploadArchives{
repositories{
mavenDeployer{
repository(url:uri('../repo'))
pom.groupId = 'com.test.plugin' // 组名
pom.artifactId = 'test' // 插件名
pom.version = '2.0.0' // 版本号
}
}
}
然后执行这个uploadArchives Task
这是会发现,工程下多了一个文件夹:
app module如果需要使用,需要添加依赖:
apply plugin: 'com.android.application'
apply plugin: 'hhh'
buildscript{
repositories{
maven{
url uri('../repo')
}
}
dependencies{
classpath 'com.test.plugin:test:2.0.0'
}
}
// 引用插件
apply plugin: 'fff'
总结
今天就暂时先写到这里,之后会陆陆续续增加一些关于gradle的相关知识
也欢迎关注我的公众号,之后会推荐更多好用的组件库。