对于 Android 工程来说就比较复杂了,因为可能有很多相同的任务,他们的名字是基于 Build Types和Product Flavors 生成的。
为了解决这个问题, android 对象提供了两个属性:
- applicationVariants (仅仅适用于 app plugin )
- libraryVariants (仅仅适用于 library plugin )
- testVariants (两种 plugin 都适用)
ApplicationVariant, LibraryVariant, and TestVariant 这三个对象都会分别返回一个。
请注意访问这些集合中的任何一个都会触发生成所有的创建。这意味着访问这些集合后无须重新配置就会产生。
这三个variant类都具有以下属性:
ApplicationVariant类还有以下属性:
LibraryVariant类还有以下属性:
TestVariant类还有以下属性:
- ProcessManifest
- File manifestOutputFile
- AidlCompile
- File sourceOutputDir
- RenderscriptCompile
- File sourceOutputDir
- File resOutputDir
- MergeResources
- MergeAssets
- File outputDir
- ProcessAndroidResources
- File manifestFile
- File resDir
- File assetsDir
- File sourceOutputDir
- File textSymbolOutputDir
- File packageOutputFile
- File proguardOutputFile
- GenerateBuildConfig
- Dex
- File outputFolder
- PackageApplication
- File resourceFile
- File dexFile
- File javaResourceDir
- File jniDir
- File outputFile
- To change the final output file use “outputFile” on the variant object directly.
- ZipAlign
- File inputFile
每一个任务类型的 API 都会因为 Gradle 的工作方式以及 Android plugin 的设置受到限制。
首先,Gradle 限制只能配置任务的输入/输出以及一些可选的标志。所以,这里的这些任务只能定义输入/输出。
其次,大多数任务的输入并不唯一,通常会混合 sourceSets,Build Types 以及 Product Flavors。为了保持构建简单以及可读性,我们的目标是让开发者通过 DSL 通过这些对象修改构建,而不是深入的了解任务的输入和选项进而修改它们。
还要注意的是,除了 ZipAlign 任务类型,其他所有的任务都需要设置私有数据让他们运行。这就意味着不能基于这些类型手动的创建新的任务。
对于 Gradle 的任务(DefaultTask, JavaCompile, Copy, Zip),请参考 Gradle 文档。