多模块Android项目:如何统一配置build.gradle中的公共SDK参数?
统一配置Android模块化项目的Sdk版本参数(基于Version Catalog)
当然可以,借助Version Catalog的集中版本管理能力,结合Gradle的子项目配置或约定插件,就能实现所有模块自动继承统一的Sdk参数,无需重复编写。以下是两种实用方案:
方案一:根项目统一配置(快速实现)
1. 在Version Catalog中定义Sdk版本
打开项目根目录的libs.versions.toml,在[versions]块中添加Sdk参数:
[versions] compileSdk = "34" minSdk = "24" targetSdk = "34"
2. 根项目build.gradle中统一配置所有子模块
根据你使用的Groovy或Kotlin DSL,选择对应代码添加到根项目的build.gradle(或build.gradle.kts)中:
Groovy版
subprojects { afterEvaluate { project -> // 仅对Android应用/库模块生效 if (project.plugins.hasPlugin('com.android.application') || project.plugins.hasPlugin('com.android.library')) { android { compileSdk libs.versions.compileSdk.get().toInteger() defaultConfig { minSdk libs.versions.minSdk.get().toInteger() targetSdk libs.versions.targetSdk.get().toInteger() } } } } }
Kotlin DSL版
subprojects { afterEvaluate { if (plugins.hasPlugin("com.android.application") || plugins.hasPlugin("com.android.library")) { configure<com.android.build.api.dsl.CommonExtension<*, *, *, *, *>> { compileSdk = libs.versions.compileSdk.get().toInt() defaultConfig { minSdk = libs.versions.minSdk.get().toInt() targetSdk = libs.versions.targetSdk.get().toInt() } } } } }
配置完成后,所有模块无需再重复编写compileSdk、minSdk和targetSdk。如果某个模块需要特殊配置(比如单独的minSdk),直接在该模块的build.gradle中覆盖对应参数即可,Gradle会优先使用模块内的配置。
方案二:约定插件(大型项目推荐)
对于模块较多的大型项目,使用Gradle约定插件可以让配置更模块化、可维护:
1. 创建约定插件
在项目根目录创建buildSrc目录,然后在buildSrc/src/main/groovy(或kotlin)下创建插件类:
Groovy版插件类(com/example/AndroidSdkConventionPlugin.groovy)
import org.gradle.api.Plugin import org.gradle.api.Project import com.android.build.api.dsl.CommonExtension class AndroidSdkConventionPlugin implements Plugin<Project> { @Override void apply(Project project) { // 对Android应用和库模块应用统一配置 project.plugins.withId('com.android.application') { configureAndroidSdk(project) } project.plugins.withId('com.android.library') { configureAndroidSdk(project) } } private void configureAndroidSdk(Project project) { project.extensions.configure(CommonExtension) { android -> android.compileSdk = project.libs.versions.compileSdk.get().toInt() android.defaultConfig { minSdk = project.libs.versions.minSdk.get().toInt() targetSdk = project.libs.versions.targetSdk.get().toInt() } } } }
配置buildSrc的依赖(buildSrc/build.gradle)
dependencies { implementation 'com.android.tools.build:gradle:8.2.0' }
2. 全局应用约定插件
在根项目的build.gradle中添加:
subprojects { apply plugin: com.example.AndroidSdkConventionPlugin }
之后每个模块只需正常应用com.android.application或com.android.library插件,就会自动继承统一的Sdk配置,同样支持模块内单独覆盖参数。
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

