前言
gradle 插件在一个android工程中用到的不多,但是很多高级的玩法都用到了,
这里写个demo总结并传到github上,希望对大家有帮助。
1. 自定义插件并上传
- 新建一个demo工程(随意命名,本文中命名为FirstPlugin (源码下载))
- 创建一个library module(随意命名,本文中命名为print)
- 除了src/main/java 目录和 build.gradle外,其他文件都删除
- build.gradle内容如下,其中插件上传的maven地址需要根据实际情况修改
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
compile gradleApi()
compile 'com.android.tools.build:gradle:3.1.3'
}
repositories {
mavenCentral()
}
//group和version在后面使用自定义插件的时候会用到
group = 'com.xfz.plugin'
version = '1.0.0'
uploadArchives {
repositories {
mavenDeployer {
//提交到远程服务器:
// repository(url: "http://www.xxx.com/repos") {
// authentication(userName: "admin", password: "admin")
// }
//mac下默认的本地的Maven地址
repository(url: "file:///Users/xufangzhen/.m2/repository")
}
}
}
- new一个java插件类(随意命名,本文中命名为PrintPlugin.java),
实现Plugin类,在apply方法中随意打印字符串
package com.xfz.plugin;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
public class PrintPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
System.out.println("first gradle plugin ==============");
}
}
- 在main目录下再创建resources/META-INF/gradle-plugins目录,在gradle-plugins目录下创建properties文件(随意命名,本文命名first.print.properties),在该文件里写上刚才的java实现类
implementation-class=com.xfz.plugin.PrintPlugin
sync项目后,最终目录如下
image.png
6.执行task,上传自己的插件
./gradlew uploadArchives
其他说明
- 如果使用groovy写插件代码,需要把java文件夹改成groovy。
- 如果是插件所在的项目依赖插件,则不需要写properties文件,但是module名需要改成BuildSrc。
- 初学者容易写错文件或者文件夹名字,注意排查。
- 确保maven环境环境正确配置,路径正确。
2. 使用自定义插件
- 新建一个demo工程(随意命名,本文中命名为UsePlugin (源码下载))
- 在app目录的build.gradle文件里配置下即可
buildscript {
repositories {
google()
jcenter()
maven {
//Maven仓库地址
url "file:///Users/xufangzhen/.m2/repository"
}
}
dependencies {
//groupo:module:version
classpath 'com.xfz.plugin:print:1.0.0'
}
}
//first.print为resources/META-INF/gradle-plugins下的properties文件名称
apply plugin: 'first.print'
- clean后发现可以打印出:first gradle plugin ==============
./gradlew clean
3. 自定义插件给当前工程使用
给当前工程使用就不需要上传和resources,非常简单,需要module名为BuildSrc
image.png
另外build.gradle如下
apply plugin: 'groovy'
dependencies {
compile gradleApi()
}
repositories {
jcenter()
}
在主app的build.gradle中添加
//注意没有引号
apply plugin: com.xfz.print.LocalPrint
网友评论