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

如何在检测到Android Gradle插件时自动执行Gradle任务配置?

解决方案

核心思路是利用Gradle的插件应用回调机制,仅当Android插件被应用到子项目时才执行相关配置,避免主构建脚本直接依赖未加载的Android类。

具体实现代码

在主build.gradle.kts中添加以下配置:

subprojects {
    // 处理Android Library模块
    pluginManager.withPlugin("com.android.library") {
        val androidExt = extensions.getByType(com.android.build.gradle.LibraryExtension::class)
        val androidPlugin = plugins.getPlugin(com.android.build.gradle.LibraryPlugin::class.java)
        
        tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java).configureEach {
            libraries.from({
                AndroidGradleWrapper.getRuntimeJars(androidPlugin, androidExt)
            })
        }
    }

    // 处理Android Application模块(如果项目包含此类模块)
    pluginManager.withPlugin("com.android.application") {
        val androidExt = extensions.getByType(com.android.build.gradle.AppExtension::class)
        val androidPlugin = plugins.getPlugin(com.android.build.gradle.AppPlugin::class.java)
        
        tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java).configureEach {
            libraries.from({
                AndroidGradleWrapper.getRuntimeJars(androidPlugin, androidExt)
            })
        }
    }
}

关键说明

  • pluginManager.withPlugin("插件ID"):仅当指定插件被应用到当前子项目时,才执行内部逻辑。此时Android相关类已被Gradle加载,不会出现解析错误。
  • subprojects块:确保配置自动应用到所有子项目,无需手动在每个子项目的构建脚本中重复配置。
  • 区分com.android.library和com.android.application:覆盖项目中不同类型的Android模块,保证所有Android目标都能触发配置。

额外注意事项

如果AndroidGradleWrapper是自定义工具类,需确保它能被主构建脚本访问:

  • 推荐将其放在项目的buildSrc目录下,Gradle会自动将buildSrc的代码加入构建脚本类路径。
  • 若无法使用buildSrc,可通过主脚本的buildscript块引入包含该类的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:57:32