本文主要是介绍Gradle 与 AGP 构建 API: 进一步完善您的插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
欢迎阅读 MAD Skills 系列 之 Gradle 与 AGP 构建 API 的第三篇文章。在上一篇文章《Gradle 与 AGP 构建 API: 如何编写插件》中,您学习了如何编写您自己的插件,以及如何使用 Variants API。
如果您更喜欢通过视频了解此内容,请 点击此处 查看。
在本文中,您将会学习 Gradle 的 Task、Provider、Property 以及使用 Task 进行输入与输出。同时您也将进一步完善您的插件,并学习如何使用新的 Artifact API 访问各种构建产物。
Property
假设我想要创建一个插件,该插件可以使用 Git 版本自动更新应用清单文件中指定的版本号。为了达到这一目标,我需要为构建添加两个 Task。第一个 Task 会获取 Git 版本,而第二个 Task 将会使用该 Git 版本来更新清单文件。
让我们从创建名为 GitVersionTask
的新任务开始。GitVersionTask 需要继承 DefaultTask,同时实现带有注解的 taskAction 函数。下面是查询 Git 树顶端信息的代码。
abstract class GitVersionTask: DefaultTask() {@TaskActionfun taskAction(){// 这里是获取树版本顶端的代码val process = ProcessBuilder("git","rev-parse --short HEAD").start()val error = process.errorStream.readBytes().toString()if (error.isNotBlank()) {System.err.println("Git error : $error")}var gitVersion = process.inputStream.readBytes().toString()//...}
}
我不能直接缓存版本信息,因为我想将它存储在一个中间文件中,从而让其他 Task 也可以读取和使用这个值。为此,我需要使用 RegularFileProperty。Property 可以用于 Task 的输入与输出。在本例中,Property 将会作为呈现 Task 输出的容器。我创建了一个 RegularFileProperty,并使用 @get:OutputFile 对其进行注解。OutputFile 是附加至 getter 函数的标记注解。此注解会将 Property 标记为该 Task 的输出文件。
@get:OutputFile
abstract val gitVersionOutputFile: RegularFileProperty
现在,我已经声明了 Task 的输出,让我们回到 taskAction() 函数,我会在这里访问文件并写入我想要存储的文本。本例中,我会存储 Git 版本,也就是 Task 的输出。为了简化示例,我将查询 Git 版本的代码替换为了硬编码字符串。
abstract class
这篇关于Gradle 与 AGP 构建 API: 进一步完善您的插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!