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

Android多模块项目Groovy转Kotlin Gradle:共享依赖配置疑问

解决Kotlin Gradle DSL中共享多模块依赖的问题

在Groovy Gradle里直接写独立依赖文件引入的方式,放到Kotlin DSL里会失效,核心原因是Kotlin是静态类型语言,必须明确依赖配置的作用域,不能像Groovy那样隐式识别上下文。下面给两种实用的解决方案:

方案一:使用DependencyHandler扩展函数

这种方式最接近你原来的使用习惯,步骤如下:

  1. 在项目根目录创建一个shared-dependencies.kt文件(也可以放在buildSrc/src/main/kotlin下,让所有模块自动可见),内容如下:
import org.gradle.api.artifacts.dsl.DependencyHandler

fun DependencyHandler.addSharedDependencies() {
    // Kotlin依赖
    implementation(Dependencies.Kotlin.stdlibJdk7)
    implementation(Dependencies.Kotlin.coroutineCore)

    // Dagger依赖
    implementation(Dependencies.Dagger.core)
    kapt(Dependencies.Dagger.coreCompiler)

    // 日志依赖
    implementation(Dependencies.Logging.timber)
    implementation(Dependencies.Logging.slf4j)
    implementation(Dependencies.Logging.slf4jTimber)

    // Shimmer依赖
    implementation(Dependencies.Shimmer.shimmer)
}
  1. 在需要引入共享依赖的模块build.gradle.kts中,直接在dependencies块里调用这个扩展函数:
dependencies {
    addSharedDependencies()
    // 模块自身的其他依赖可以继续加在这里
}

方案二:使用预编译脚本插件(适合大型项目)

如果项目模块较多,推荐把共享依赖做成Gradle插件,复用性更强:

  1. 在项目根目录创建buildSrc目录(Gradle会自动识别这个目录作为构建脚本的源码目录),然后创建如下结构:
buildSrc/
├── src/
│   └── main/
│       ├── kotlin/
│       │   └── com/
│       │       └── yourproject/
│       │           └── SharedDependenciesPlugin.kt
│       └── resources/
│           └── META-INF/
│               └── gradle-plugins/
│                   └── com.yourproject.shared-dependencies.properties
└── build.gradle.kts
  1. 在SharedDependenciesPlugin.kt中编写插件逻辑:
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies

class SharedDependenciesPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.dependencies {
            // 这里写入所有共享依赖
            implementation(Dependencies.Kotlin.stdlibJdk7)
            implementation(Dependencies.Kotlin.coroutineCore)
            implementation(Dependencies.Dagger.core)
            kapt(Dependencies.Dagger.coreCompiler)
            implementation(Dependencies.Logging.timber)
            implementation(Dependencies.Logging.slf4j)
            implementation(Dependencies.Logging.slf4jTimber)
            implementation(Dependencies.Shimmer.shimmer)
        }
    }
}
  1. 在com.yourproject.shared-dependencies.properties中指定插件实现类:
implementation-class=com.yourproject.SharedDependenciesPlugin
  1. 在需要引入共享依赖的模块build.gradle.kts中,直接引入插件即可:
plugins {
    id("com.yourproject.shared-dependencies")
    // 其他模块需要的插件,比如com.android.library等
}

额外注意

如果你的Dependencies常量类是在Groovy里定义的,需要把它也转换成Kotlin对象,比如:

object Dependencies {
    object Kotlin {
        val stdlibJdk7 = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0"
        val coroutineCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3"
    }
    // 其他依赖组类似
}

内容的提问来源于stack exchange,提问作者Ludiras

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:00:22