android - 为不同的构建类型和产品风格添加不同配置的正确方法

标签 android gradle build.gradle

在我的应用程序中,我有 4 个环境,即 开发 , , UAT , 发布 .对于每个环境,我都有一个具有自己配置的构建类型。很像建议的方式,例如:

buildTypes {
    Dev {
        buildConfigField "String", 'BASE_URL', "https://dev-api.yourbackend.com"
    }
    SIT {
        buildConfigField "String", 'BASE_URL', "https://sit-api.yourbackend.com"
    }
    UAT {
        buildConfigField "String", 'BASE_URL', "https://uat-api.yourbackend.com"
    }
    Release {
        buildConfigField "String", 'BASE_URL', "https://api.yourbackend.com"
    }
}

但现在我有 5-6 种不同的此类配置,而不仅仅是 BASE_URL .点赞ClientId , ClientSecret ETC..

另外,我有 2 种产品风格,这意味着我需要创建 8 种不同的构建变体,并在每个这样的变体中包含所有这 5-6 种配置。所有这些看起来都很笨拙。

我发现的另一个解决方案是为每个构建变体创建一个文件夹,例如 flavour1Dev , flavour2Sit , flavour2Uat等等..并在该文件夹中有特定于该变体的配置文件。这再次涉及 8 个不同的文件夹,并且随着我们添加更多环境而不断增长。

有没有更好的方法来处理这个问题,可能像 config.gradle文件,我只能拥有这些配置并将其导入 app/build.gradle ,一种模块化整个构建变体配置的方法。

更新 1

我按照@Md 试过这个。阿萨杜扎曼的回答:

build.gradle
…
…
apply from: './config.gradle'


…
…
android {
    …
    …
    defaultConfig {
        …
        …
        buildConfigField('String', ‘BASE_URL’, '"https://default.yourbackend.com”')
    }
    …
    …
}

config.gradle
android {
    buildTypes {
        dev {
            buildConfigField('String', ‘BASE_URL’, '"https://dev.yourbackend.com”')
        }
        sit {
            buildConfigField('String', ‘BASE_URL’, '"https://sit.yourbackend.com”')
        }
    }
}

问题是在生成的 BuildConfig ,我仍然看到默认值:
public static final String BASE_URL = "https://default.yourbackend.com";

最佳答案

您已经通过创建单独的 config.gradle 自己提到了解决方案文件。我尝试如下实现它:

步骤 - 1:创建 config.gradle在您的app 内文件夹并添加所有配置。

android {

    buildTypes {

        Dev {
            buildConfigField "String", 'BASE_URL', "https://dev-api.yourbackend.com"
        }

        SIT {
            buildConfigField "String", 'BASE_URL', "https://sit-api.yourbackend.com"
        }

        UAT {
            buildConfigField "String", 'BASE_URL', "https://uat-api.yourbackend.com"
        }

        Release {
            buildConfigField "String", 'BASE_URL', "https://api.yourbackend.com"
        }
    }

    productFlavors {
        flavor1 {
            /*implementation*/
        }

        flavor2 {
            /*implementation*/
        }

        flavor3 {
            /*implementation*/
        }
    }
}

步骤-2:包括 config.gradle在您的 app/build.gradle .
apply plugin: 'com.android.application'
apply from: './config.gradle'

....

关于android - 为不同的构建类型和产品风格添加不同配置的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60134189/

相关文章:

android-studio - Android Studio - 由 : java. nio.file.AccessDeniedException 引起:rawproto(Gradle 同步失败)

java - 登录集成问题,找不到类 CognitoUserPoolsSignInProvider

java - Android 中如何去掉不需要的字符?

spring-boot - SpringBoot : can't create fully executable jar with 2. 0.0-M3

gradle - 缺少 JavaFX 应用程序类 com.MainApp

gradle - 解决gradle构建脚本依赖

android - 是否可以通过 Gradle 任务设置 android 版本代码和名称?

java - 如何在 android 上的 onListItemClick 方法中为 ListView 的选定项目着色

android - 在 RecyclerAdapter 中单击按钮时增加徽章值

Android Studio 模拟器错误 - 以非零退出值 2 结束