部署含Dagger依赖的AAR至本地Artifactory后运行崩溃求助
这个问题我之前踩过坑,核心就是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

