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

Android项目跨模块使用注解遇Unresolved reference问题求助

问题原因

核心问题是依赖传递性配置错误:

  • 当Module A使用annotationProcessor(Java项目)或kapt(Kotlin项目)依赖Module B时,这种依赖属于编译时仅需依赖,Gradle不会将Module B的代码(包括注解类)暴露给依赖Module A的Module C。
  • 注解本身是需要在代码中直接引用的类,必须通过api或implementation依赖才能让下游模块(Module C)访问到。
解决方法

根据你的项目结构,有两种可行的调整方案:

方案1:调整Module A对Module B的依赖配置

如果Module B中同时包含注解定义和注解处理器代码,修改Module A的构建脚本(build.gradle/build.gradle.kts):

  • 用api依赖Module B的注解部分(让依赖能传递到Module C)
  • 用annotationProcessor/kapt单独依赖注解处理器部分

Kotlin项目示例:

// Module A的build.gradle.kts
dependencies {
    // 让Module C能访问到Module B中的注解类
    api(project(":module-b"))
    // 仅Module A编译时使用注解处理器
    kapt(project(":module-b"))
}

Java项目示例:

// Module A的build.gradle
dependencies {
    api project(':module-b')
    annotationProcessor project(':module-b')
}

方案2:拆分Module B为注解模块和处理器模块(推荐更清晰的架构)

如果Module B的注解和处理器代码耦合度低,建议拆分:

  1. 创建Module D(纯注解模块):仅包含注解定义,使用java-library/kotlin-library插件
  2. 修改Module B(注解处理器模块):依赖Module D,仅保留处理器代码
  3. 修改Module A的依赖:
    • api(project(":module-d"))(让Module C能拿到注解)
    • kapt(project(":module-b"))(编译时用处理器)
  4. Module C依赖Module A后,就能直接引用Module D中的注解
额外检查项
  • 确保Module B/Module D的构建脚本中,没有使用compileOnly等限制依赖传递的配置
  • 同步Gradle后,执行./gradlew moduleC:compileDebugSources(或对应变体),检查控制台是否有其他隐藏错误
  • 确认注解类的包名正确,Module C中的导入语句无拼写错误

内容的提问来源于stack exchange,提问作者이범수

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:07