android gradle-如何创建一种新的产品风格,但重用另一种风格的价值观?

android gradle-如何创建一种新的产品风格,但重用另一种风格的价值观?,android,android-gradle-plugin,Android,Android Gradle Plugin,我想在build.gradle文件中创建一个新版本,但它完全是另一个版本的副本。我做它是为了测试。只有applicationid后缀将不同。这种味道我想被称为beta。但我希望找到一种不必重复代码的方法。由于它与我的staging flavor具有所有相同的设置,有没有一种方法可以让gradle复制staging flavor中的相同设置。我的口味定义如下: productFlavors { def STRING = "String" def BOOLE

我想在build.gradle文件中创建一个新版本,但它完全是另一个版本的副本。我做它是为了测试。只有applicationid后缀将不同。这种味道我想被称为beta。但我希望找到一种不必重复代码的方法。由于它与我的staging flavor具有所有相同的设置,有没有一种方法可以让gradle复制staging flavor中的相同设置。我的口味定义如下:

    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 ?
    productFlavors {
    mock {
        applicationIdSuffix = ".mock"
    }
    prod {

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

在我们的应用程序中,我们为不同的版本使用不同的口味,其中一个主包由两种口味使用

我们在gradle中将其定义为:

    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 ?
    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
基本活动/片段位于“main”中,味道共享片段/活动名称。我们还使用泛型,泛型使用准备好的可扩展主类


端点字符串在res/字符串中,每个味道都是独立的。

只需使用
defaultConfig
就像我明白你的意思一样。但有时它不是默认设置。只是我想让它拥有与另一种口味相同的设置,而无需再次复制所有值。但评论不错。我认为这是没有办法的,因为我找不到任何东西