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

标签 android gradle groovy android-gradle-plugin 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 中的所有构建风格此时都是只读的,并抛出以下错误:

无法为 ProductFlavor_Decorated 设置只读属性“name”的值

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

最佳答案

它应该像这样简单:

@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

关于android - 从自定义 Gradle 插件中动态添加构建风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43258998/

相关文章:

android - 如何在 AsyncTask 的弹出窗口中打开 WebView

android - Gradle/Flutter 中的构建错误 : 'Could not resolve all artifacts for configuration' ?

jenkins - 如何通过在 jenkins 脚本控制台上编写 groovy 脚本来获取环境变量的值?

java - 如何更新每个循环中的数据而不是在 Android 中一次显示所有循环数据

android - 违反 Google Play 开发者政策的警告 : Action Required

android - 无法读取原生 JSON 数据

android - 无法将 Ksoap2 依赖项添加到 Android 项目

grails - 在datasource.groovy中使用编解码器规范隐藏数据库密码不起作用

grails - 通过元类中的闭包替换带参数的方法

android - SQLite 数据库中的并发性