如何通过Gradle的Debug/Release类型配置不同环境常量
通过Gradle构建类型配置环境常量(避免环境配置错误)
1. 在App级build.gradle中配置构建专属常量
打开项目里的app/build.gradle(Module级配置文件),在android代码块下的buildTypes节点,给Debug和Release构建分别定义服务器URL:
android { compileSdk 34 defaultConfig { // 你的应用基础配置... applicationId "com.example.yourapp" minSdk 21 targetSdk 34 versionCode 1 versionName "1.0" } buildTypes { debug { // 开发环境服务器地址 buildConfigField "String", "BASE_URL", "\"https://dev.yourdomain.com/api/\"" // 标记当前是否为Debug环境,方便代码逻辑判断 buildConfigField "boolean", "IS_DEBUG", "true" // 可选:给Debug包加后缀,一眼区分环境 applicationIdSuffix ".debug" versionNameSuffix "-debug" } release { // 生产环境服务器地址 buildConfigField "String", "BASE_URL", "\"https://prod.yourdomain.com/api/\"" buildConfigField "boolean", "IS_DEBUG", "false" // Release包常规配置 minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
注意:字符串类型的常量需要用转义双引号包裹,否则Gradle会解析出错。同步Gradle后,系统会自动生成
BuildConfig类,包含这些常量。
2. 在代码中直接引用常量
同步完Gradle,就能在Java/Kotlin代码里直接调用BuildConfig里的常量,不用手动修改配置:
// Java示例 Retrofit retrofit = new Retrofit.Builder() .baseUrl(BuildConfig.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build();
// Kotlin示例 val retrofit = Retrofit.Builder() .baseUrl(BuildConfig.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build()
3. 额外优化:杜绝环境混淆
- Debug包标识:上面加的
applicationIdSuffix和versionNameSuffix,会让Debug版应用的包名变成com.example.yourapp.debug,版本名显示1.0-debug,和Release版可以同时安装,不会覆盖,一眼就能区分。 - UI环境提示:在Debug版的应用内(比如启动页底部、设置页)添加明显的环境标签,比如红色的"【开发环境】"字样,测试时不会搞错。
4. 多环境扩展(可选)
如果需要测试、预发布等更多环境,可以用productFlavors来扩展:
android { // 其他配置... flavorDimensions "environment" productFlavors { dev { dimension "environment" buildConfigField "String", "BASE_URL", "\"https://dev.yourdomain.com/api/\"" } test { dimension "environment" buildConfigField "String", "BASE_URL", "\"https://test.yourdomain.com/api/\"" } prod { dimension "environment" buildConfigField "String", "BASE_URL", "\"https://prod.yourdomain.com/api/\"" } } }
这样就能生成DevDebug、TestRelease等多种构建变体,按需选择构建即可。
内容的提问来源于stack exchange,提问作者Gaurav Gujjar
相关产品推荐
相关产品推荐

