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

多模块项目转Gradle Kotlin DSL时Android块未被识别

Kotlin DSL抽离Android配置时的"Unresolved reference: android"问题解决

问题背景

将Android项目转为多模块结构时,把com.android.application之外的插件、Android配置块、通用依赖移到根目录的base-build.gradle.kts,通过apply(from)引入到app模块后,同步出现两个问题:

  1. base-build.gradle.kts中的android块提示Unresolved reference: android
  2. 出现Cannot access class 'org.gradle.api.Action'警告
    但相同逻辑用Groovy DSL配置可正常运行。

核心原因

Kotlin DSL是类型安全的,普通apply(from)加载的脚本无法获得Android Gradle插件的DSL类型支持;同时Gradle版本与AGP版本不匹配也会引发Action类访问警告。

解决方案

方案一:使用预编译脚本插件(推荐)

预编译脚本插件会被Gradle编译,能获得完整的Kotlin DSL类型提示与支持,是Kotlin DSL抽离通用配置的标准方式。

  1. 创建预编译插件目录
    在项目根目录新建buildSrc/src/main/kotlin路径(若不存在),Gradle会自动识别该目录下的预编译脚本。

  2. 编写预编译插件脚本
    在上述目录下创建base.android.application.gradle.kts,内容如下:

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("kotlin-parcelize")
    id("com.google.devtools.ksp")
    id("com.google.dagger.hilt.android")
}

android {
    compileSdk = 34

    defaultConfig {
        minSdk = 26
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
        // 补充你的其他默认配置
    }

    // 可添加buildTypes、compileOptions等通用Android配置
}

// 在这里定义通用依赖(可选)
dependencies {
    // 示例:implementation("androidx.core:core-ktx:1.12.0")
}
  1. 修改app模块配置
    删除app模块build.gradle.kts中的apply(from),直接应用预编译插件:
plugins {
    id("base.android.application")
}

// 在这里添加app模块专属的配置和依赖
dependencies {
    implementation(project(":core"))
    // 其他模块或第三方依赖
}
  1. 清理旧文件
    删除根目录下的base-build.gradle.kts,同步项目即可。

方案二:修改现有脚本的类型引用(临时兼容)

如果不想重构为预编译插件,可通过显式指定Android扩展类型解决引用问题:
修改base-build.gradle.kts内容:

apply(plugin = "org.jetbrains.kotlin.android")
apply(plugin = "kotlin-parcelize")
apply(plugin = "com.google.devtools.ksp")
apply(plugin = "com.google.dagger.hilt.android")

// 显式获取Application类型的Android扩展,解决Unresolved reference问题
configure<com.android.build.gradle.internal.dsl.ApplicationExtension> {
    compileSdk = 34

    defaultConfig {
        minSdk = 26
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
        // 你的其他配置
    }

    // 其他Android配置
}

// 依赖块可正常编写
dependencies {
    // 通用依赖
}

解决"Cannot access class 'org.gradle.api.Action'"警告

检查gradle/wrapper/gradle-wrapper.properties中的Gradle版本,AGP 8.3.2需要搭配Gradle 8.4及以上版本,修改distributionUrl:

distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip

额外注意事项

  • 确保项目级build.gradle.kts中,plugins块的插件版本与buildscript里的classpath版本完全一致
  • 多模块项目中,若有library模块,可同理创建base.android.library.gradle.kts预编译插件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:17:10