Android项目中如何显示release源码集并编写release专属代码?
解决Android Kotlin Gradle中Release源码集与专属代码的问题
一、手动创建Release源码集目录
Android Studio不会自动生成release源码集目录,你需要手动在项目的src目录下创建对应结构:
- Kotlin项目:
src/release/kotlin/[你的包路径] - Java项目:
src/release/java/[你的包路径] - 可选:若需专属资源,创建
src/release/res/目录(如不同的字符串、图标等)
创建完成后,Android Studio会自动识别该源码集,可在Project视图中查看。
二、显式关联Release源码集(可选)
如果AS未自动识别,可在android代码块中手动配置sourceSets:
android { // 其他配置... sourceSets { named("release") { java.srcDir("src/release/kotlin") // Kotlin项目用此配置,Java项目替换为"src/release/java" res.srcDir("src/release/res") manifest.srcFile("src/release/AndroidManifest.xml") // 若需专属Manifest文件 } } buildTypes { release { isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } }
三、编写Release专属代码的两种方式
方式1:源码集类替换
在release源码集内创建与main源码集同包同名的类,编译时release构建会优先使用release源码集的类。示例:
- main源码集的
Config.kt:
object Config { const val DEBUG_MODE = true fun getLogLevel(): String = "VERBOSE" }
- release源码集的
Config.kt:
object Config { const val DEBUG_MODE = false fun getLogLevel(): String = "WARN" }
debug构建将使用main中的实现,release构建自动切换为release中的版本。
方式2:编译时常量判断
在build.gradle.kts的release配置中添加buildConfigField或resValue,通过常量在代码中区分环境:
android { buildTypes { debug { buildConfigField("boolean", "IS_RELEASE", "false") resValue("string", "app_build_type", "debug") } release { isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") buildConfigField("boolean", "IS_RELEASE", "true") resValue("string", "app_build_type", "release") } } }
代码中使用示例:
if (BuildConfig.IS_RELEASE) { // Release环境专属逻辑 } else { // Debug环境专属逻辑 }
资源文件可直接引用@string/app_build_type。
内容的提问来源于stack exchange,提问作者Chaoz
相关产品推荐
相关产品推荐

