android - 如何在自定义 Gradle 任务中调用方法?
问题描述
我正在尝试构建一个自定义 Gradle 任务来执行一些应用程序维护操作。我想将参数传递给任务以控制操作。为了说明我的困境,请考虑以下两个微不足道的自定义任务类:
// Custom task with no arguments
public class HelloClassA extends DefaultTask {
@TaskAction
public void printHello()
{
println "Hello, World!"
}
}
// Custom task with one argument
public class HelloClassB extends DefaultTask {
@TaskAction
public void printMsg(String msg)
{
println msg
}
}
它们是相同的,只是“A”打印一个硬编码字符串,而“B”接受一个字符串作为参数。
A 类用于以下任务:
task helloA(type:HelloClassA) { }
并被调用,例如,
gradlew.bat helloA
它工作正常并打印“你好,世界!” 到构建窗口。但是,我无法弄清楚调用 B 类的任务的语法。
我怎么做?(或者我只是想这样做吗?)
我注意到一些相当奇怪的事情......
- 类中方法的名称(例如,“printHello”)似乎无关紧要:任何合理的名称都会产生相同的输出(?)。
- 当通过 gradlew.bat 调用时,任务名称的任何明确子字符串的工作方式都相同,例如,“GRADLEW helloA”或“GRADLEW hell”。我想这只是 GRADLE 试图提供帮助(?)。
解决方案
您可以将参数直接传递给方法,而无需使用属性。就是这样:
apply plugin: 'com.android.application'
import javax.inject.Inject
abstract class CustomTask extends DefaultTask {
@Inject
CustomTask(String message,int number) {
println "Processing \""+message+"\", "+number // process args
}
}
在附加参数的 android 部分中创建任务“mytask”,如下所示(必须在计数和格式上与任务定义一致):
tasks.register( 'mytask', CustomTask, 'Hello, World!', 123 )
通过执行“mytask”
gradlew.bat mytask
产生输出
Processing "Hello, World!", 123
推荐阅读
- c# - 将客户端的三个值与数据库中的其他三个值进行比较
- max - SQL:过滤后勤运动中的自循环
- laravel - 拉拉维尔 | jensegers mongo DB。如何从具有 $hidden 中提供的字段的模型中进行选择?
- sql-server - CREATE 表可以在 SQL Server 中具有 UDT 类型的列吗?
- regex - 路由工作的正则表达式不正确并返回错误 404
- jquery - Ajax 中的 jQuery 版本
- html - css悬停图像上的中心图标+文本
- bash - 使用tar解压后的文件名
- arrays - 如何优雅地将数组的一部分复制到另一个数组中或注入到另一个数组中
- php - 如果 minicart hasitem/noitem 从 div 添加/删除类