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

部署含Dagger依赖的AAR至本地Artifactory后运行崩溃求助

解决Dagger依赖AAR部署到本地Artifactory后运行时ClassNotFoundException问题

这个问题我之前踩过坑,核心就是Dagger的依赖没有被正确传递到你的主项目中,或是AAR本身的依赖配置、上传流程出了问题。下面给你几个针对性的解决方案:

  • 把AAR模块的Dagger依赖改成api声明
    如果你的AAR模块里用implementation引入Dagger,这个依赖是不会传递给引用它的主项目的。必须换成api才能让依赖向下传递:

    // 正确的依赖声明(让Dagger传递给主项目)
    api 'com.google.dagger:dagger:2.x' // 替换成你实际使用的Dagger版本
    api 'com.google.dagger:dagger-android:2.x'
    
    // 注解处理器不需要传递,用annotationProcessor或kapt即可
    annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
    
  • 上传AAR时务必同步上传pom文件
    本地Artifactory是通过pom文件识别AAR的依赖关系的,如果只传了AAR没传pom,主项目根本不知道需要拉取Dagger。你可以在AAR模块的build.gradle里配置上传任务,确保生成并上传pom:

    task sourcesJar(type: Jar) {
        from android.sourceSets.main.java.srcDirs
        classifier 'sources'
    }
    
    task javadocJar(type: Jar) {
        from javadoc.destinationDir
        classifier 'javadoc'
    }
    
    artifacts {
        archives sourcesJar
        archives javadocJar
    }
    
    uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: "http://你的本地Artifactory地址/repo") {
                    authentication(userName: "用户名", password: "密码")
                }
                pom.version = "1.0.0" // 你的AAR版本号
                pom.artifactId = "你的AAR artifactId"
                pom.groupId = "你的项目groupId"
            }
        }
    }
    

    配置完成后执行./gradlew uploadArchives,重新把AAR和pom文件上传到Artifactory。

  • 检查主项目的仓库配置
    主项目的根build.gradle必须添加本地Artifactory的仓库地址,否则拉取不到AAR传递的Dagger依赖:

    repositories {
        google()
        mavenCentral()
        maven {
            url "http://你的本地Artifactory地址/repo"
        }
    }
    
  • 排查混淆/多DEX问题
    如果主项目启用了R8/D8混淆,可能误删了Dagger的类,在proguard-rules.pro里添加Dagger的混淆规则:

    # Dagger 混淆规则
    -keep class dagger.** { *; }
    -keep interface dagger.** { *; }
    -keep class javax.inject.** { *; }
    -keep class * extends dagger.internal.Binding
    -keep class * extends dagger.internal.ModuleAdapter
    -keep class * extends dagger.internal.StaticInjection
    

    要是主项目开启了多DEX,还要确保Dagger类被包含在主DEX中:

    android {
        defaultConfig {
            multiDexEnabled true
        }
    }
    dependencies {
        implementation 'androidx.multidex:multidex:2.0.1'
    }
    

最后记得清理项目缓存再重新构建:执行./gradlew clean build,或者在Android Studio里点击File -> Invalidate Caches / Restart,很多时候缓存问题也会导致这类依赖找不到的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:47:30