【问题标题】:android gradle - how to create a new product flavor but reuse values from another flavor?android gradle - 如何创建新的产品风格但重用另一种风格的值?
【发布时间】:2017-08-26 16:02:18
【问题描述】:

我想在我的 build.gradle 文件中创建一个新风格,但它完全复制了另一种风格。我将其用于测试目的。只有 applicationid 后缀会有所不同。这种味道我想被称为beta。但我希望有一种方法不必重复代码。因为它具有与我的 staging 风格相同的设置,有没有办法我可以告诉 gradle 复制与 staging 风格相同的设置。我的口味是这样定义的:

    productFlavors {

        def STRING = "String"
        def BOOLEAN = "boolean"
        def TRUE = "true"
        def FALSE = "false"
        def FLAVOR = "FLAVOR"
        def RETROFIT_LOG_ALL = "RETROFIT_LOG_ALL"
        def BASE_ENDPOINT = "BASE_ENDPOINT"


        staging {
            buildConfigField STRING, BASE_ENDPOINT, '"https://pepsi-staging-api.pmlo.co"'
            buildConfigField STRING, BASE_IMGIX_ENDPOINT, '"myappfashion.imgix.net"'
            buildConfigField STRING, BASE_ENDPOINT_WEB, '"www.pepsi-staging.pmlo.co"'
            buildConfigField BOOLEAN, RETROFIT_LOG_ALL, TRUE
            manifestPlaceholders = [appDrawerName: "myapp-Staging"]
            ext.enableCrashlytics = false
            versionNameSuffix '-STAGING'
            applicationIdSuffix 'staging'
        }


//why do i have to copy the same settings again, is there a way to just over ride from the staging flavor the things i want changed ?
        beta {
            buildConfigField STRING, BASE_ENDPOINT, '"https://pepsi-staging-api.pmlo.co"'
            buildConfigField STRING, BASE_IMGIX_ENDPOINT, '"myappfashion.imgix.net"'
            buildConfigField STRING, BASE_ENDPOINT_WEB, '"www.pepsi-staging.pmlo.co"'
            buildConfigField BOOLEAN, RETROFIT_LOG_ALL, TRUE
            manifestPlaceholders = [appDrawerName: "myapp-Staging"]
            ext.enableCrashlytics = false
            versionNameSuffix '-beta' //only these two thigns are different
            applicationIdSuffix 'beta'
        }


        prod {
            // applicationId "com.mobile.myapp"
            buildConfigField STRING, BASE_ENDPOINT, '"https://api.myappfashion.com"'
            buildConfigField STRING, BASE_IMGIX_ENDPOINT, '"myappfashion.imgix.net"'
            buildConfigField STRING, BASE_ENDPOINT_WEB, '"www.myappfashion.com"'
            buildConfigField BOOLEAN, RETROFIT_LOG_ALL, FALSE
            ext.enableCrashlytics = true
            manifestPlaceholders = [appDrawerName: "myapp"]
        }

}

    i just want to override versionNameSuffix & applicationIdSuffix only in beta and copy all values from staging. is there a way not to duplicate code like this example ?

【问题讨论】:

  • 只需使用 defaultConfig 就像在 this answer 中一样
  • 我明白你的意思。有时它虽然不是默认设置。它只是我希望它具有与另一种风味相同的设置,而无需再次复制所有值。但很好的评论。我认为没有办法做到这一点,因为我找不到任何东西

标签: android android-gradle-plugin


【解决方案1】:

在我们的应用程序中,我们为不同的构建使用不同的风格,并使用一个主包供两种风格使用。

我们在 gradle 中这样定义它:

    productFlavors {
    mock {
        applicationIdSuffix = ".mock"
    }
    prod {

    }
    flavour1 {
        applicationIdSuffix = ".flavour1"
        versionCode = 1
        versionName "1.0." + versionCode
    }
    flavour2 {
        applicationIdSuffix = ".flavour2"
        versionCode = 2
        versionName "1.0." + versionCode
    }
}

有包:

-> src
---> flavour1
-----> java
-----> res
---> flavour2
-----> java
-----> res
---> main
-----> assets
-----> java
-----> res
-----> AndroidManifest.xml

基本活动/片段在“主要”中,风味共享片段/活动名称。我们还使用为此准备的可扩展主类的泛型。

端点字符串在 res/strings 中,每种风格都是分开的。

【讨论】:

    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2014-09-02
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多