React Native Android项目引入本地AAR方法及构建报错解决
报错信息
原始报错内容:
Direct local .aar file dependencies are not supported when building an AAR. The resulting AAR would be broken because the classes and Android resources from any local .aar file dependencies would not be packaged in the resulting AAR. Previous versions of the Android Gradle Plugin produce broken AARs in this case too (despite not throwing this error). The following direct local .aar file dependencies of the :library-name project caused this error
报错中文翻译:
构建AAR产物时不支持直接依赖本地
.aar文件。最终生成的AAR会出现损坏,原因是本地.aar依赖包含的类文件、Android资源不会被打包到输出的AAR中。旧版本Android Gradle插件在该场景下同样会生成损坏的AAR,仅不会主动抛出该错误。:library-name模块存在的以下直接本地.aar依赖触发了本次构建错误。
适用环境
- React Native:0.69.1
- Gradle:7.4.2
- Android Studio Bumblebee:2021.1.1 Patch 3
- OpenJDK:18.0.1.1
解决方案
该报错本质是AGP 7.x+ 新增的构建校验:库模块打包AAR时,禁止通过直接引用本地文件的方式依赖AAR,避免出现依赖缺失的损坏包。根据场景选择对应方案即可:
方案1:通过flatDir方式依赖本地AAR(操作最简单)
适用于自己开发的RN原生模块、或者需要修改第三方RN原生模块配置的场景:
- 进入报错对应的
:library-name模块的android目录,在模块级build.gradle同级位置新建libs文件夹,将需要引入的.aar文件拷贝到该目录下 - 修改该模块的
build.gradle文件,删除原有直接引用AAR的写法(比如implementation files('libs/xxx.aar')、implementation fileTree(dir: 'libs', include: ['*.aar'])),添加如下配置:
// 和android、dependencies块同级 repositories { flatDir { dirs 'libs' } } dependencies { // 注意使用api而非implementation,保证依赖可传递,不要写文件后缀、不要用files()包裹 api(name: '你的AAR文件名(不带.aar后缀)', ext: 'aar') // 其他原有依赖保持不变 }
- 打开项目主app模块的
build.gradle(或者项目根目录的build.gradle中allprojects下的repositories块),添加flatDir路径指向库模块的libs目录,保证主工程能找到AAR文件:
allprojects { repositories { // 保留原有maven、jcenter等配置 flatDir { dirs project(':library-name').file('libs') } } }
- 执行
./gradlew clean后重新构建即可。
方案2:将AAR发布到本地Maven仓库依赖(最稳定,无依赖传递问题)
如果flatDir方案出现依赖找不到、资源冲突的问题,可以用本地Maven的方式引入:
- 在项目根目录新建
local-maven-repo文件夹作为本地maven仓库地址 - 进入
:library-name模块的android目录,新建publish-aar.gradle文件,写入以下配置:
apply plugin: 'maven-publish' publishing { publications { localAar(MavenPublication) { groupId = 'com.local.aar' // 可自定义组ID artifactId = 'your-aar-lib' // 可自定义依赖名 version = '1.0.0' // 可自定义版本号 artifact("libs/你要引入的aar文件名.aar") } } repositories { maven { url uri("${rootProject.projectDir}/local-maven-repo") } } }
- 在该模块的
build.gradle文件末尾添加一行引入发布脚本:
apply from: 'publish-aar.gradle'
- 在项目根目录执行命令将AAR发布到本地maven仓库:
./gradlew :library-name:publish
- 修改依赖配置:
首先在所有需要引用该依赖的模块的repositories块中添加本地maven地址:
repositories { // 原有仓库配置保留 maven { url uri("${rootProject.projectDir}/local-maven-repo") } }
然后在模块的dependencies块中用标准maven依赖写法引入:
dependencies { api 'com.local.aar:your-aar-lib:1.0.0' }
- 执行clean后重新构建即可。
注意事项
- 主application模块直接依赖本地AAR时,用
implementation files('libs/xxx.aar')写法不会触发该报错,这个校验仅针对需要打包输出AAR的库模块 - 库模块依赖本地AAR时优先用
api而非implementation,否则依赖不会向上传递,主app打包时会找不到AAR中的类和资源 - 如果修改的是
node_modules下的第三方库代码,建议使用patch-package保存修改,避免重新执行npm/yarn install后配置被覆盖。
内容的提问来源于stack exchange,提问作者Shubham Bisht
相关产品推荐
相关产品推荐

