Gradle插件开发

Android Studio上的Android项目是通过Gradle构建的,Gradle插件是使用Groovy进行开发的,而Groovy是可以兼容Java,功能强大,兼容性好,所以学习一些基本的Gradle的知识是很有必要的。学习插件开发最开始的目的是实现一个多渠道打包(美团提出的方案),可后来发现Java中对Apk的操作有很多的问题,使用Python没有问题,使用Python又不方便与Gradle系统集成,所以项目就搁置了。

1.项目目录

我们可以通过Android Studio来开发Gradle插件。
(1)新建一个Android项目。
(2)新建一个Module项目,类型选择Java Library。
(3)将新建的Module中除了build.gradle文件外的其余文件全都删除,然后删除build.gradle文件中的所有内容。
(4)在新建的module中新建文件夹src,接着在src文件目录下新建main文件夹,在main目录下新建groovy目录,这时候groovy文件夹会被Android识别为groovy源码目录。除了在main目录下新建groovy目录外,你还要在main目录下新建resources目录,同理resources目录会被自动识别为资源文件夹。在groovy目录下新建项目包名,就像Java包名那样。resources目录下新建文件夹META-INF,META-INF文件夹下新建gradle-plugins文件夹。这样,就完成了gradle 插件的项目的整体搭建,之后就是小细节了。目前,项目的结构是这样的。

目录结构图

2.开发

2.1 配置gradle

在Module中build.gradle中添加下面内容。在这个脚本里使用groovy插件编译groovy源码,声明gradleAPI作为即时编译依赖,apply plugin: ‘maven’ 是用来创建一个插件jar文件并且存储在本地maven库里。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apply plugin: 'groovy'
apply plugin: 'maven'


dependencies {
compile gradleApi()
compile localGroovy()
}

repositories {
mavenCentral()
}

///下面是maven方面的信息 后面会使用到
group='com.caij'
version='1.0.0'

uploadArchives {
repositories {
mavenDeployer {
repository(url: uri('../repo'))
}
}
}

2.2 编写插件

创建一个自己的插件,并添加任务

1
2
3
4
5
6
7
8
9
10
11
12
package com.caij.plugin1

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

class MyCustomPlugin implements Plugin<Project> {
void apply(Project project) {
project.task('myTask') << {
println "Hi this is plugin"
}
}
}

2.3 指定插件实现类

在gradle-plugins目录下创建一个properties类型的文件,文件名很重要,后面添加插件的时候会用到,apply plugin ‘java’, ‘java’就是文件的文件名。
在properties文件中添加:
implementation-class=com.caij.plugin1.MyCustomPlugin

2.4 编译插件上传本地仓库

运行uploadArchives 任务,等待执行完成
gradle任务图

2.5 测试

创建一个Module, 类型选择Android Library, 在Module中build中添加下面内容

1
2
3
4
5
6
7
8
9
10
11
12
buildscript {
repositories {
maven {
url uri('../repo')
}
}
dependencies {
//group:插件项目的名字:version
classpath 'com.caij:plugin1:1.0.0'
}
}
apply plugin: 'test.plugin'

你会看到有一个myTask的任务,执行任务。
任务图

输出图

3.扩展

Gradle插件开发二
Android多渠道打包插件项目