从自定义 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")
}
productFlavors
是 NamedDomainObjectContainer
.
的实例
来自docs of NamedDomainObjectContainer.create():
Creates a new item with the given name, adding it to this container.
因此,这将使用提供的名称创建一个 ProductFlavor
,并将其添加到 productFlavors
。
我正在编写一个自定义 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")
}
productFlavors
是 NamedDomainObjectContainer
.
来自docs of NamedDomainObjectContainer.create():
Creates a new item with the given name, adding it to this container.
因此,这将使用提供的名称创建一个 ProductFlavor
,并将其添加到 productFlavors
。