01.Gradle插件
Gradle 插件
Gradle 插件基础
Gradle 插件的作用
- 添加任务到项目中,可对项目进行测试、编译、打包
- 添加依赖到项目中,可用来配置项目构建过程中需要的依赖
- 可以向项目中现有的对象类型添加新的扩展属性、方法等,可方便项目的配置和构建优化,比如 Android 项目构建中的 android{} 就是 Android Gradle 插件为 Project 对象添加的一个扩展
- 可以对项目进行一些约定,如使用 Java Gradle 插件可以约定
src/main/java
目录下源代码的存放位置,在编译的时候就可以编译指定目录下的 Java 源代码文件。
应用一个插件
二进制插件
二进制插件就是实现了 org.gradle.api.Plugin
接口的插件,每个 Java Gradle 插件都有一个 plugin id,可以通过如下方式使用一个 Java 插件:
1
apply plugin : 'java'
其中 java 是 Java 插件的 plugin id,对于 Gradle 自带的核心插件都有唯一的 plugin id,这里的 java 对应的具体类型是 org.gradle.api.plugins.JavaPlugin
,所以可以使用如下方式使用 Java 插件:
1
2
apply.plugin:org.gradle.api.plugins.JavaPlugin // org.gradle.api.plugins默认导入
apply.plugin:JavaPlugin
二进制插件一般是打包在一个 Jar 中发布的,如自定义插件的时候在发布的时候要指定插件的 Plugin id,这个 plugin id 必须是唯一的,可使用应用包名来保证 plugin id 的唯一性。
脚本插件
脚本插件的使用实际上就是某个脚本文件的使用,使用脚本插件时将脚本加载进来就可以了,使用脚本插件要使用到关键字 from,后面的脚本文件可以是本地的也可以是网络上的脚本文件
1
2
3
4
5
6
7
8
9
10
11
12
13
// version.gradle文件
ext{
versionName = "1.0"
versionCode = 1
}
// build.gradle文件
apply from: 'version.gradle'
task taskVersion{
doLast{
println "版本是${versionName},版本号是${versionCode}"
}
}
apply 方法的用法
Project.apply() 可以接收三种不同的参数
1
2
3
4
5
6
7
8
// 闭包作为参数
void apply(Closure closure);
// 配置一个ObjectConfigurationAction
void apply(Action<? super ObjectConfigurationAction> action);
// Map作为参数
void apply(Map<String, ?> options);
案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Map作为参数
apply plugin: 'java'
// 闭包作为一个参数
apply {
plugin 'java'
}
// 配置一个ObjectConfigurationAction
apply(new Action<ObjectConfigurationAction>() {
@Override
void execute(ObjectConfigurationAction objectConfigurationAction) {
objectConfigurationAction.plugin('java')
}
})
Gradle 自定义插件
Gradle 8.0 前自定义插件(groovy)
[[02.Gradle 自定义插件 legacy]]
Gradle 8.0 自定义插件(kotlin)
[[03.Gradle 自定义插件]]
Gradle 三方插件
[[04.Gradle三方插件]]
Android Studio 调试 Gradle 插件
方式 1:remote
1
./gradlew app:mytask -Dorg.gradle.debug=true
此时可以看到 gradle 在等待 debug 进程连接:
- 之后在插件代码中打好断点,在 as 中点击 debug 按钮,就可以调试插件代码了
方式 2:Configurations
- 点击
【Run】->【Edit Configurations…】
:
- 然后点击左上角的
【+】
,选择【Remote】
: - 名字随便起,把命令行参数复制下来,【Use module classpath】选择要调试的插件,其他默认即可,然后点击【OK】:
这样服务端就搞好了,稍后我们需要配置客户端调试器让其连接过来,就可以调试了
- 在目标项目 (即引入插件的那个项目),打开 gradle 目录,启动模块一般都是 app,所以我们展开到【:app】->【Tasks】右击【build】选择 create
- 在打开的界面把第 3 步复制下来的内容粘贴到【VM options】,并且将 suspend=n 改为 suspend=y 然后点击【OK】:
新版的是这个Modify Run Configuration
:
6.【:app】->【Tasks】->【Run Configgurations】会生成一个任务,最终在最终就是下边这个样子:
- 现在可以开始调试了,在插件代码里面需要调试的地方打好断点,双击我们新建的 gradle 任务:
- 将工具栏的运行选项改成我们新建的远程调试那个选项,没有取名字的话默认就是【unnamed】,然后点击启动调试的图标:
- 目标项目的调试器很快就会连接到我们建立的服务端并自动跳转,遇到断点则会断下来:
断点只能进入 Plugin 的 apply 方法,不能进入 Transform 的 transform 方法;先选我们的 remote 进入调试模式,再运行 task 就可以进入到断点
Android Studio 4.1.1 调试
进行调试当插件工作不是预期的结果时,我们可能需要进行断点调试 (当然打日志的方法也不错),在之前的版本中还需要新增 remote 配置,然后以 debug 方式执行这个任务,现在在 AndroidStudio 中 (4.1.1 版本) 中,只需要在侧边找打这个任务,右键菜单 debug 执行就好了
Gradle 自定义插件总结
[[Gradle自定义插件总结]]