从自定义 Gradle 插件中动态添加构建风格

Dynamically add build flavor from within a custom Gradle plugin

我正在编写一个自定义 Gradle 插件,它将向 Android 项目添加一个或多个任务。其中一项任务需要将 'ad hoc' 构建风格添加到 Android 项目已经定义的现有构建风格列表中。

我已尝试通过更改名称来更改现有构建风格之一,如以下代码所示:

import com.android.build.gradle.internal.dsl.ProductFlavor
import org.gradle.api.Plugin
import org.gradle.api.Project

class MyPlugin implements Plugin<Project> {

    @Override
    void apply(Project target) {
        ProductFlavor adHocFlavor = target.android.productFlavors.first()
        adHocFlavor.name = 'adHoc'
        target.android.productFlavors.add(adHocFlavor)
    }

}

这里的问题是 target.android.productFlavors 中的所有构建风格此时都是只读的,并抛出以下错误:

Cannot set the value of read-only property 'name' for ProductFlavor_Decorated

有谁知道如何从插件中动态添加构建风格?

应该就这么简单:

@Override
void apply(Project target) {
    target.android.productFlavors.create("name")    
}

productFlavorsNamedDomainObjectContainer.

的实例

来自docs of NamedDomainObjectContainer.create()

Creates a new item with the given name, adding it to this container.

因此,这将使用提供的名称创建一个 ProductFlavor,并将其添加到 productFlavors