如何避免在Android子模块的build.gradle中重复配置?
避免Android项目模块build.gradle重复配置的方案
下面是三种常用的解决方法,帮你统一管理通用配置,减少子模块的重复代码:
1. 根目录build.gradle统一注入配置
在项目根目录的build.gradle(Groovy语法)中,通过subprojects块为所有子模块批量配置通用参数:
subprojects { apply plugin: 'com.android.library' apply plugin: 'org.jetbrains.kotlin.android' android { compileSdk 33 defaultConfig { minSdk 24 } compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } } }
之后子模块的build.gradle只需要声明自身独有的namespace即可:
android { namespace = "com.google.samples.apps.nowinandroid.core.common" }
2. 独立配置文件复用
在项目根目录创建单独的配置文件(比如configs/android_common.gradle),把通用配置集中写入:
android { compileSdk 33 defaultConfig { minSdk 24 } compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } }
然后在每个子模块的build.gradle中引入这个文件:
apply from: rootProject.file("configs/android_common.gradle") android { namespace = "com.google.samples.apps.nowinandroid.core.common" }
3. 约定插件(Kotlin DSL推荐方案)
如果项目使用Kotlin DSL(build.gradle.kts),可以通过buildSrc创建约定插件来实现更优雅的配置复用:
步骤1:创建约定插件类
在项目根目录新建buildSrc/src/main/kotlin/AndroidCommonConventionPlugin.kt:
import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.android import com.android.build.api.dsl.LibraryExtension class AndroidCommonConventionPlugin : Plugin<Project> { override fun apply(target: Project) { with(target) { apply(plugin = "com.android.library") apply(plugin = "org.jetbrains.kotlin.android") extensions.configure<LibraryExtension>("android") { compileSdk = 33 defaultConfig { minSdk = 24 } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } } } } }
步骤2:配置buildSrc依赖
在buildSrc/build.gradle.kts中添加必要依赖:
plugins { `kotlin-dsl` } repositories { mavenCentral() google() } dependencies { implementation("com.android.tools.build:gradle:7.4.2") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0") }
步骤3:子模块应用插件
子模块的build.gradle.kts只需应用插件并声明namespace:
plugins { id("android-common-convention") } android { namespace = "com.google.samples.apps.nowinandroid.core.common" }
内容的提问来源于stack exchange,提问作者Mohammadreza Khahani
相关产品推荐
相关产品推荐

