多模块Android项目本地AAR依赖构建报错求助
解决子模块引入本地AAR报错的方案
问题本质
当你的子模块是Library类型(最终生成AAR)时,直接通过fileTree或files依赖本地AAR,Android Gradle插件(AGP)不会把这个本地AAR的类和资源打包进子模块生成的AAR里,最终导致子模块的AAR损坏。新版本AGP直接抛出错误,旧版虽不报错但生成的AAR同样存在问题。
可行解决方案
方案一:将本地AAR发布到本地Maven仓库(推荐)
这种方式能保证依赖传递正常,适配多模块场景:
- 在项目根目录创建
publish-local.gradle文件,内容如下:
plugins { id 'maven-publish' } publishing { publications { maven(MavenPublication) { groupId = 'com.your.sdk' // 自定义groupId artifactId = 'sdk-v3' // 自定义artifactId version = '3.0.1' // 对应你的AAR版本号 artifact file('libs/sdk-v3.0.1.aar') } } repositories { mavenLocal() } }
- 在子模块
features:second-module的build.gradle中引入该脚本:
apply from: rootProject.file('publish-local.gradle')
- 执行Gradle任务
publishToMavenLocal,将AAR发布到本地Maven仓库 - 移除原来的
fileTree依赖,换成Maven坐标依赖:
implementation 'com.your.sdk:sdk-v3:3.0.1'
同时确保子模块的repositories包含mavenLocal():
repositories { mavenLocal() flatDir { dirs 'libs' } }
方案二:将AAR转为独立Library模块
如果不想用Maven仓库,可以把本地AAR封装成一个模块:
- 在项目中新建一个Android Library模块(比如命名为
sdk-module) - 删除模块默认的
src目录,把sdk-v3.0.1.aar放到模块根目录 - 修改该模块的
build.gradle:
configurations.maybeCreate("default") artifacts.add("default", file('sdk-v3.0.1.aar'))
- 在子模块
features:second-module中添加模块依赖:
implementation project(':sdk-module')
方案三:仅在主App模块依赖本地AAR(适合本地调试场景)
如果子模块不需要单独发布AAR,仅用于本地开发,可以把AAR依赖移到主App模块:
- 在子模块中用
compileOnly声明依赖(仅用于编译时校验):
compileOnly files('libs/sdk-v3.0.1.aar')
- 在主App模块保留原来的
implementation依赖:
implementation fileTree(include: ['sdk-v3.0.1.aar'], dir: 'libs' )
注意:这种方式下子模块单独构建的AAR仍会缺少SDK内容,仅适合不需要发布子模块AAR的场景。
内容的提问来源于stack exchange,提问作者Kazunari
相关产品推荐
相关产品推荐

