You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在应用与库模块间共享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扩展+子模块引用

  1. 在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"
    ))
}
  1. 在应用模块和库模块的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配置逻辑:

  1. 在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
        }
    }
}
  1. 在应用模块和库模块的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:09:40