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

时间:2017-04-06 15:07:09

标签: android gradle groovy android-gradle android-productflavors

我正在编写一个自定义Gradle插件,它会将一个或多个任务添加到Android项目中。其中一项任务需要添加一个特殊的'将风格构建到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

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

1 个答案:

答案 0 :(得分:3)

应该这么简单:

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

productFlavorsNamedDomainObjectContainer的实例。

来自docs of NamedDomainObjectContainer.create()

  

使用给定名称创建一个新项目,并将其添加到此容器中。

因此,这会创建一个ProductFlavor,其名称为productFlavors