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

将Android应用与dadb作为Gradle子项目编译遇错求助

问题分析

你遇到的编译错误是因为dadb模块的构建脚本直接引用了Gradle内部非公开API(比如org.gradle.jvm.toolchain.internal.JavaToolchainFactory),这些API仅在Gradle自身的类加载器中可用。当你将dadb作为子项目加入Android根项目时,根项目的Gradle环境不会暴露这些内部API,导致编译失败。单独编译dadb时能成功,是因为它的构建配置可能通过特定插件或Gradle版本间接获得了内部API的访问权限。

解决方案

最可靠的修复方式是替换内部API的使用,改用Gradle官方公开的Java Toolchain API配置GraalVM Native的Java Launcher。

步骤1:移除内部API相关代码

修改dadb/dadb/build.gradle.kts,删除以下内容:

  • 内部API导入语句:
import org.gradle.internal.jvm.inspection.DefaultJvmMetadataDetector
import org.gradle.jvm.toolchain.internal.DefaultToolchainSpec
import org.gradle.jvm.toolchain.internal.JavaToolchainFactory
import org.gradle.jvm.toolchain.internal.JavaToolchainInput
  • 依赖内部API的变量定义:
val toolchainFactory = objects.newInstance(JavaToolchainFactory::class.java)
val metadataDetector = objects.newInstance(DefaultJvmMetadataDetector::class.java)

步骤2:改用公开API配置Java Launcher

替换graalvmNative块的内容,使用Gradle公开的javaToolchains API实现功能:

graalvmNative {
    binaries {
        all {
            buildArgs.add("-H:+EnableAllSecurityServices")
            // 使用公开API获取符合版本要求的Java Launcher
            javaLauncher.set(javaToolchains.launcherFor {
                languageVersion.set(JavaLanguageVersion.of(java.targetCompatibility.majorVersion))
            })
        }
    }
}

可选:调整根项目Settings配置

你当前的根目录settings.gradle.kts同时引入了:dadb和:dadb:dadb,这会导致Gradle将dadb根目录和它的子模块都作为独立子项目,可能引发冲突。建议修改为:

rootProject.name = "cookie"
include(":app")
// 仅引入dadb的核心子模块
include(":dadb:dadb")
验证修改

完成上述调整后,在根目录执行./gradlew assemble,即可正常编译所有子项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:13:22