Android Studio:Gradle产品风味:定义自定义属性

AgentKnopf

我正在Gradle(Android Studio)中构建Android应用程序的不同产品风格。

因此,我定义了以下产品口味:

android {

    project.ext.set("customer", "")
    project.ext.set("server", "")

    //Configuration happens here - code removed for readability

    buildTypes {

        debug {
            server = "test"
        }

        release {
            server = "release"
        }
    }

    //Available product flavors
    productFlavors {
        customerA{
            customer = "a"
        }
        customerB{
            customer = "b"
        }
        customerC{
            customer = "c"
        }
    }
}

但是,稍后,当我在我的一个构建任务中访问定义的项目属性“客户”(其值已在我当前正在构建的产品风格中设置)时,即使iam正在构建customerA,它也始终具有值“ c”(在这种情况下,房地产客户应为“ a”而不是“ c”)。例如,稍后我执行以下任务:

preBuild << {
    println "Building customer: " + customer
}

它总是打印:

建筑客户:c

所以我猜有一些覆盖发生吗?可能与VS执行阶段有关?不知道如何/为什么,所以任何帮助将不胜感激。

更新:或者,在gradle构建的执行阶段,我已经可以进一步确定产品类型的名称(没有附加构建类型名称)和构建类型(同样:没有产品类型名称前缀) 。

考虑到以上配置,预期的产品风味名称将为:customerA,customerB和customerC。

斯科特·巴尔塔

在评估阶段,Gradle执行您android块中的所有代码它不仅执行与您要编译的样式相关的代码。实际上,在评估阶段,它甚至不真正知道您的口味是什么。它必须对此进行评估以找出答案。

因此,所有三贵线customer = "a"customer = "b"以及customer = "c"将得到执行。

这是Gradle的细微之处之一,使它很难学习。

因此,我已经解释了为什么您的代码无法按预期的方式工作,但是此答案是不完整的,因为我没有过多地说明如何使其正常工作,但是很难说要做什么,因为我我不确定您要完成什么。总的来说,我可以说您应该考虑使用用户定义的任务来完成所需的工作,并设置任务内依赖项以确保按正确的顺序执行任务。Android Gradle构建的一个陷阱是,即使是那些任务也要到评估阶段才被定义(在评估构建文件并知道这些风味是什么之前,它不知道构建所有风味所需的任务),

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章