使用android-maven-gradle-plugin时AAR依赖错误求助
解决多模块依赖中Common代码重复的问题
我之前在维护多模块Android项目时也碰到过类似的困扰,结合你的客户端-服务端模块结构,给你几个针对性的解决方案:
方案1:将Common模块改为纯Java/Kotlin库(推荐)
如果你的Common模块只是工具类、Bean这些不依赖Android SDK的代码,完全没必要做成AAR模块——AAR是Android专属库,包含资源、Manifest等额外内容,反而会增加依赖复杂度。
把Common改成纯Java/Kotlin库的步骤很简单:
- 在Common模块的
build.gradle(或build.gradle.kts)中,替换插件:// 替换原来的com.android.library插件 plugins { id 'java-library' // 如果用Kotlin就加这个 id 'org.jetbrains.kotlin.jvm' } - 然后在App和SDK模块中直接依赖:
implementation project(':common')
这种方式下,Common的代码会被直接集成到App和SDK中,既不会有AAR依赖的传递问题,也能保证代码唯一,修改一次就能同步到所有依赖模块。
方案2:保持Common为AAR,优化依赖传递
如果Common模块必须是AAR(比如包含Android资源、自定义View等),那重点要解决依赖传递性的问题:
- 在SDK模块中依赖Common时,使用
api而非implementation:// 这样SDK的依赖者(也就是App模块)能自动获取Common的依赖 api project(':common') - 避免在App模块中直接依赖Common,而是通过SDK间接引入——这样所有对Common的修改只需要维护一个依赖入口,不会出现重复代码的问题。
- 如果遇到依赖冲突(比如多个模块引入了相同类),可以在项目根目录的
build.gradle中添加版本统一策略:allprojects { repositories { // ... 你的仓库配置 } configurations.all { resolutionStrategy { // 强制统一Common模块的版本 force project(':common') } } }
方案3:通过本地/远程仓库管理依赖
如果你的模块需要独立发布(比如SDK要给外部使用),可以用Maven Publish插件把Common和SDK发布到本地仓库或远程仓库:
- 在Common和SDK模块中配置Maven Publish:
plugins { id 'maven-publish' } publishing { publications { release(MavenPublication) { from components.release groupId 'com.yourcompany' artifactId 'common' // SDK模块这里改成sdk version '1.0.0' } } repositories { mavenLocal() // 本地仓库,也可以配置远程仓库 } } - 先发布Common模块,再发布SDK模块(SDK依赖发布后的Common)
- App模块直接依赖SDK:
implementation 'com.yourcompany:sdk:1.0.0'
这种方式能让依赖关系更清晰,也能避免本地模块依赖的潜在问题。
内容的提问来源于stack exchange,提问作者zhaokai
相关产品推荐
相关产品推荐

