繁体   English   中英

根据产品风味维度创建 gradle 任务

[英]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 ->
        ...
    }
}

由于productFlavorsProductFlavor的所有实例的列表,而不是跨维度的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM