在我的应用程序中,我有 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/