如何在应用与库模块间共享Gradle的Android默认配置?
解决Android Gradle通用defaultConfig配置的方案
首先明确:com.android.application 和 com.android.library 确实有共同的基础插件——com.android.base,它是所有Android Gradle插件的核心基础,包含了Android构建的通用配置逻辑,其中就覆盖了android.defaultConfig相关的配置能力。
不过直接在root.gradle.kts里应用com.android.base插件并不能生效,因为root项目本身不是Android模块,正确的做法是通过Gradle的扩展机制或预编译脚本插件来实现通用配置的复用:
方法一:使用Gradle扩展+子模块引用
- 在root项目的
build.gradle.kts中定义扩展,封装通用的defaultConfig参数:
// root/build.gradle.kts ext { set("commonDefaultConfig", mapOf( "minSdkVersion" to 21, "targetSdkVersion" to 34, "compileSdkVersion" to 34, "versionCode" to 1, "versionName" to "1.0.0" )) }
- 在应用模块和库模块的gradle文件中引用该扩展:
// app/build.gradle.kts(应用模块) android { defaultConfig { val commonConfig = rootProject.extra["commonDefaultConfig"] as Map<String, Any> minSdk = commonConfig["minSdkVersion"] as Int targetSdk = commonConfig["targetSdkVersion"] as Int compileSdk = commonConfig["compileSdkVersion"] as Int versionCode = commonConfig["versionCode"] as Int versionName = commonConfig["versionName"] as String } } // module/build.gradle.kts(库模块) android { defaultConfig { val commonConfig = rootProject.extra["commonDefaultConfig"] as Map<String, Any> minSdk = commonConfig["minSdkVersion"] as Int targetSdk = commonConfig["targetSdkVersion"] as Int compileSdk = commonConfig["compileSdkVersion"] as Int } }
方法二:使用预编译脚本插件(更推荐)
预编译脚本插件支持类型安全,比扩展机制更可靠,适合封装通用Android配置逻辑:
- 在root项目下创建
buildSrc目录(Gradle会自动识别该目录作为预编译脚本源),然后创建buildSrc/src/main/kotlin/CommonAndroidConfig.kt:
// buildSrc/src/main/kotlin/CommonAndroidConfig.kt import org.gradle.api.Project import org.gradle.kotlin.dsl.android fun Project.applyCommonAndroidDefaultConfig() { android { defaultConfig { minSdk = 21 targetSdk = 34 compileSdk = 34 } } }
- 在应用模块和库模块的gradle文件中调用这个函数:
// app/build.gradle.kts plugins { id("com.android.application") } applyCommonAndroidDefaultConfig() android { // 补充应用模块特有的配置,比如applicationId defaultConfig { applicationId = "com.example.myapp" versionCode = 1 versionName = "1.0.0" } } // module/build.gradle.kts plugins { id("com.android.library") } applyCommonAndroidDefaultConfig() android { // 补充库模块特有的配置,比如consumerProguardFiles defaultConfig { consumerProguardFiles("consumer-rules.pro") } }
关于com.android.base插件的补充说明
虽然com.android.base是两大插件的共同基础,但它并不适合直接在root项目中应用——它依赖Android模块的特定上下文(比如变体管理、构建任务体系),root项目缺少这些上下文,直接应用会触发构建错误。上面两种方法才是项目中复用通用配置的常规方案。
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

