[英]So is there a way to get a variable based on product.flavor in gradle to a task?
[英]Create gradle task based on product flavor dimensions
我的 build.gradle 中有以下 productFlavors:
productFlavors {
free {
}
paid {
}
}
现在我添加了一个 flavorDimension ( http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Multi-flavor-variants ),如下所示:
flavorDimensions "payment", "releasetype"
productFlavors {
paid {
dimension "payment"
}
free {
dimension "payment"
}
beta {
dimension "releasetype"
}
major {
dimension "releasetype"
}
}
我正在使用此脚本为 jacoco 覆盖率报告生成 gradle 任务。 该脚本将构建类型(调试、发布)与产品风格(付费、免费等)结合起来,并相应地生成任务。
当然,这与风味维度不同,因为脚本没有将它们考虑在内。
该脚本生成任务:
testDebugPaidUnitTestCoverage
testDebugFreeUnitTestCoverage
testDebugBetaUnitTestCoverage
testDebugMajorUnitTestCoverage
它应该做的是:
testDebugPaidBetaUnitTestCoverage
testDebugPaidMajorUnitTestCoverage
...
我尝试通过访问 gradle 任务中的 flavorDimensions
android.flavorDimensions
但它不识别该属性:
Error:Could not get unknown property 'flavorDimensions' for object of type com.android.build.gradle.LibraryExtension.
关于如何扩展此脚本以使用风味维度或如何从我的外部 jacoco.gradle 脚本访问它们的任何建议?
我可以从那里访问构建类型和产品风格,所以这应该可能吗?
我不擅长 gradle。
但也许你可以尝试以下
如果您的模块是库;
variants = android.libraryVariants.collect { var ->
var.name
}
如果您的模块是应用程序;
variants = android.applicationVariants.collect { var ->
var.name
}
我认为 Sam的回答是正确的,但没有解释为什么变体是关键,也没有将他的示例与相关脚本联系起来。 我会尽量回答这个问题。
问题在于脚本循环遍历产品口味,然后在嵌套循环中构建类型:
productFlavors.each { productFlavorName ->
buildTypes.each { buildTypeName ->
...
}
}
由于productFlavors
是ProductFlavor
的所有实例的列表,而不是跨维度的ProductFlavor
的所有组合的列表,因此这不提供您正在寻找的多维支持。
变体为您提供了产品风味和构建类型的所有组合。 不是嵌套循环,而是简单地循环 applicationVariants 或 libraryVariants,具体取决于您使用的是应用程序还是库。 例如:
applicationVariants.each { variantName ->
...
}
查看脚本,我发现您将遇到一个挑战:脚本构建源目录路径的方式是 buildType-directory 是 product-flavor 目录的子目录: sourcePath = "${productFlavorName}/${buildTypeName}"
。 由于变体名称都是一个字符串,因此这种路径构造不起作用。 但是,自从提出这个问题以来已经过去了很多年,无论如何,脚本的其余部分可能需要进行大修。
Gradle 为您提供的另一个可能很方便的集合是flavorDimensions
。 在示例中,这些将是字符串“payment”和“releasetype”。 通过一些花哨的循环,可以使用变体重现“免费”获得的组合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.