前言
通过上两篇文章, 我们大概知道了 Groovy,Gradle 在 Android 项目构建中的一些基本的配置和其作用, 接下来就是我们真正实践的时刻, 我们通过一个简单的插件的实现, 来将前两篇中的点串起来, 再次回顾熟悉 Groovy 语言, 通过一个简单的 demo 跑通这个插件实现流程. 创建一个插件, 并发布到本地 maven 仓库. 然后在我们的项目中运用我们的插件, 调用相关的 task.
Gradle 插件 Hello World
之前在自己学习 gradle 的时候, 网上的资料本身相对较少, 再就有些博主略过了一些细节, 导致了很多博客中给出的例子, 当我们自己实际去实践的时候, 自己反倒无法跑起来, 这里对于创建一个简单的 gradle 插件, 进行了步骤的切分, 对于每一个步骤进行较为详细的讲解.
Task
在 Gradle 文件中, 我们可以根据自己的需求写一些 task, 其后的参数为 task 指定相应的名称
task("Test") {
println("Hello world")
}
Plugin
在 Build 文件中, 我们可以实现一个简单的 Gradle 插件, 通过实现 Plugin 接口, 并实现其 apply 方法, 这里在 apply 方法中打印出一个 Hello world.
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project target) {
println("Hello world")
}
}
在 Build 文件中写, 显然无法让其复用, 如果复用, 我们就需要将其独立出来, 如何来将其写成一个独立的插件呢? 我们可以通过 AndroidStudio 来进行插件的开发, 但是由于 AndroidStudio 没有给予很好的支持, 因此, 可能需要我们去手动的删除一些文件, 然后按照正常的插件目录重新建立项目.
1. 创建一个 Java Library Module
这里, 我们新建一个 Module, 并取名 firstplugin.
2. 删除部分文件目录
将 Java 文件名称改为 groovy (因为, 我们的 demo 项目中不需要 Java 代码, 因此, 可以将其替换为 groovy.). 删除 libs 目录
3. 构建配置
原 build 文件
apply plugin: 'java'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
因为我们要支持对于 Groovy 的编译支持, 所以要添加一些 Groovy 相关的内容.
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
执行 build 文件后, 我们在进行开发的时候, 就可以进行自动提示帮助我们提升开发效率.
4. HelloWorld 插件开发
建立 Groovy 文件, 进行插件代码的开发. 这里我们命名为 FirstPlugin .
package com.example;
import org.gradle.api.Plugin
import org.gradle.api.Project
class FirstPlugin implements Plugin<Project> {
@Override
void apply(Project target) {
target.task("TestTask") {
println("Hello world")
}
}
}
5. 配置插件信息
在 Src 目录下添加 resources 文件夹, 创建一级目录, META-INF, 在其下创建二级目录, grale-plugins, 然后创建一个文件. 命名方式, 插件名称 + properties 后缀.
这里我们的文件名是
com.example.firstplugin.properties
implementation-class=com.example.FirstPlugin
里面用来指定我们的插件实现类.
6. 发布到本地仓库
在 Build 文件中添加传至本地 mavenCentral 的代码
// 根据自己需求来配置
group = 'com.jensen.plugin'
// 版本信息
version = '1.0.0'uploadArchives {
repositories {
mavenDeployer {
// 本地仓库地址
repository(url: uri('/Users/chenjensen/Desktop/repo'))
}
}
}
在 Gradle task 中执行 uploadArchives, 即可看到在本地的 repo 中产生的依赖.
7. 应用到项目中
在 Project 的 build 文件中添加
repositories {
jcenter()
// 配置 maven 地址
maven {
url uri('/Users/chenjensen/Desktop/repo')
}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
// 指定插件的路径
classpath 'com.jensen.plugin:firstplugin:1.0.0'
}
在我们的 app 的 project 中应用我们的插件
apply plugin: 'com.example.firstplugin'
TestTask
执行控制台打印出执行信息.
Hello world
总结
通过这一个流程, 我们可以写出来一个简单的 Gradle 插件, 对于具体更深入的功能, 我们可以自己来根据自己的需求定制自己的插件, 去写相应的 task. 通过本篇, 主要是熟悉流程, 接下来的第四篇, 将会着重于如何写一个功能更丰富的插件, 并发布到 Jcenter 中, 应用到我们的项目之中.
来源: https://juejin.im/post/5a6dbdf06fb9a01cbe65907e