在我的应用程序中,我有4个环境,即 Dev , SIT , 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
等。另外,我有2种产品口味,这意味着我需要创建8个不同的构建变体,并在每个这样的变体内部都包含所有这些5-6种配置。看起来很笨拙。
我发现的另一种解决方案是为每个构建变体(例如
flavour1Dev
,flavour2Sit
,flavour2Uat
等)创建一个文件夹,并在该文件夹中包含特定于该变体的配置文件。这又涉及8个不同的文件夹,并且随着我们添加更多环境而不断增长。有没有更好的方法来处理此问题,可能像
config.gradle
文件一样,在该文件中我只能拥有这些配置,然后将其导入app/build.gradle
中,这是模块化整个构建变体配置的方式。更新1
我按照@Md尝试了这个。 Asaduzzaman的答案:
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'
....