基础Java项目有一组有限的task用于互相处理生成一个输出。 classes是一个编译Java源代码的task。可以在build.gradle文件中通过脚本很容易使用classes。这是project.tasks.classes的缩写。
classes
project.tasks.classes
在Android项目中,相比之下这就有点复杂。因为Android项目中会有大量相同的task,并且它们的名字基于_Build Types_和_Product Flavor_生成。
为了解决这个问题,android对象有两个属性:
android
applicationVariants
libraryVariants
testVariants
这三个都会分别返回一个ApplicationVariant、LibraryVariant和TestVariant对象的DomainObjectCollection。
注意使用这三个collection中的其中一个都会触发生成所有对应的task。这意味着使用collection之后不需要更改配置。
DomainObjectCollection可以直接访问所有对象,或者通过过滤器进行筛选。
android.applicationVariants.each { variant -> .... }
这三个variant类都共享下面的属性:
ApplicationVariant类还有以下附加属性:
LibraryVariant类还有以下附加属性:
TestVariant类还有以下属性:
Android task特有类型的API:
每个task类型的API由于Gradle的工作方式和Android plugin的配置方式而受到限制。 首先,Gradle意味着拥有的task只能配置输入输出的路径和一些可能使用的选项标识。因此,task只能定义一些输入或者输出。
其次,这里面大多数task的输入都不是单一的,一般都混合了sourceSet、_Build Type_和_Product Flavor_中的值。为了保持构建文件的简单和可读性,目标是要让开发者通过DSL语言修改这些对象来配饰构建的过程,而不是深入修改输入和task的选项。
另外需要注意,除了ZipAlign这个task类型,其它所有类型都要求设置私有数据来让它们运行。这意味着不可能自动创建这些类型的新task实例。
这些API也可能会被更改。一般来说,目前的API是围绕着给定task的输入和输出入口来添加额外的处理(如果需要的时候)。欢迎反馈意见,特别是那些没有预见过的需求。
对于Gradle的task(DefaultTask,JavaCompile,Copy,Zip),请参考Gradle文档。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8