将通用Gradle代码抽离到独立文件:Groovy可用Kotlin报“Unresolved reference”
解决Kotlin DSL独立脚本中"Unresolved reference: android"错误
原因
Groovy脚本可隐式访问android扩展,但Kotlin DSL是强类型语言,单独的.gradle.kts脚本默认没有android作用域上下文,必须显式声明或获取对应扩展对象。
方案1:适配现有apply from引用方式
修改gradle/androidDefaults.gradle.kts文件,通过configure方法显式配置Android库扩展:
// 引入Android库插件但不立即应用,让脚本识别扩展类型 plugins { id("com.android.library") apply false } // 配置Android Library扩展 configure<com.android.build.api.dsl.LibraryExtension> { compileSdk = 33 defaultConfig { minSdk = 21 // 按项目需求调整 targetSdk = 33 } // 添加通用配置示例 buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } }
模块中的引用方式保持不变:
apply { from(rootProject.file("gradle/androidDefaults.gradle.kts")) }
方案2:使用预编译脚本插件(Kotlin DSL最佳实践)
预编译脚本插件是Gradle推荐的Kotlin DSL复用方式,比apply from更可靠且类型安全。
- 创建buildSrc目录结构
在项目根目录下新建buildSrc文件夹,结构如下:
buildSrc/ ├── build.gradle.kts └── src/ └── main/ └── kotlin/ └── com/ └── yourcompany/ └── android-library-defaults.gradle.kts
- 配置buildSrc的build.gradle.kts
plugins { `kotlin-dsl` } repositories { google() mavenCentral() } dependencies { // AGP版本需与Gradle7.5匹配,此处使用7.4.2 implementation("com.android.tools.build:gradle:7.4.2") }
- 编写预编译插件脚本
在android-library-defaults.gradle.kts中写入通用配置:
plugins { id("com.android.library") } android { compileSdk = 33 defaultConfig { minSdk = 21 targetSdk = 33 } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } }
- 在库模块中引用插件
修改库模块的build.gradle.kts,直接引用预编译插件:
plugins { id("com.yourcompany.android-library-defaults") }
内容的提问来源于stack exchange,提问作者SimonSays
相关产品推荐
相关产品推荐

