如何在其他模块中使用app模块BuildConfig定义的配置值
跨模块共享BuildConfig配置实现方案
Android 中 app 模块的 BuildConfig 默认不允许其他模块直接访问,你可以通过以下两种方案实现配置共享:
方案1:抽取公共配置到全局Gradle文件统一管理
该方案无需新增模块,适合共享配置较少的场景:
- 在项目根目录新建
config.gradle文件,存放所有全局公共配置:
ext { // 公共静态配置 URL_PRIVACY_POLICY = "https://www.google.com/privacy-policy" URL_TERMS_OF_USE = "https://www.gogle.com/terms-of-service/" // 分环境配置 envConfigs = [ "development": [ BASE_URL: "https://api.dev.google.com/", COUNTRY_CODE: "+63" ], "staging": [ BASE_URL: "https://api.stage.google.com/", COUNTRY_CODE: "+0000" ], "production": [ BASE_URL: "https://api.google.com/", COUNTRY_CODE: "+000" ] ] }
- 在项目根目录的
build.gradle头部添加以下代码,引入全局配置:
apply from: "config.gradle"
- 修改app模块的
build.gradle配置,替换硬编码的配置值为全局引用:
applicationVariants.all { variant -> variant.buildConfigField "String", "URL_PRIVACY_POLICY", "\"${rootProject.ext.URL_PRIVACY_POLICY}\"" variant.buildConfigField "String", "URL_TERMS_OF_USE", "\"${rootProject.ext.URL_TERMS_OF_USE}\"" def currentEnv if (variant.name.startsWith("development")) { currentEnv = rootProject.ext.envConfigs.development } else if (variant.name.startsWith("staging")) { currentEnv = rootProject.ext.envConfigs.staging } else { currentEnv = rootProject.ext.envConfigs.production } variant.buildConfigField "String", "BASE_URL", "\"${currentEnv.BASE_URL}\"" variant.buildConfigField "String", "COUNTRY_CODE", "\"${currentEnv.COUNTRY_CODE}\"" }
- 修改profile模块的
build.gradle配置,添加对应配置字段生成规则(Library模块使用libraryVariants替代applicationVariants):
android { // 原有配置保持不变 libraryVariants.all { variant -> variant.buildConfigField "String", "URL_PRIVACY_POLICY", "\"${rootProject.ext.URL_PRIVACY_POLICY}\"" variant.buildConfigField "String", "URL_TERMS_OF_USE", "\"${rootProject.ext.URL_TERMS_OF_USE}\"" } }
配置完成后,你就可以在profile模块中直接通过BuildConfig.URL_PRIVACY_POLICY、BuildConfig.URL_TERMS_OF_USE调用对应配置值。
方案2:创建公共基础模块共享配置
如果需要共享的配置较多,推荐该方案,避免重复配置:
- 新建一个名为
common_base的Android Library模块 - 在
common_base模块的build.gradle中按照上述方法生成所有需要共享的BuildConfig字段 - 在app模块和profile模块的
build.gradle中都添加对common_base模块的依赖:
dependencies { implementation project(':common_base') }
- 所有模块都直接引用
common_base模块的BuildConfig即可获取统一的配置值。
注意事项
需要确保所有模块的构建变体(development/staging/production)保持一致,避免出现配置不匹配的问题。
内容的提问来源于stack exchange,提问作者Saeed Noshadi
相关产品推荐
相关产品推荐

