Expo React Native打包Gradle构建未知错误如何解决
问题根因
构建失败的核心原因是项目依赖的react-native-ad-manager版本过低,和Expo高版本默认搭载的Gradle 7+构建环境不兼容,和依赖缺失、冗余依赖没有关系,这也是新建空白Expo项目可以正常打包的原因——空白项目没有引入这个存在兼容问题的第三方库。
两个核心报错的对应逻辑:
- Gradle 7.0开始已经完全移除了内置的
maven插件,低版本react-native-ad-manager的Android构建脚本还在调用这个被删除的插件,直接触发Plugin with id 'maven' not found错误 - 插件加载失败后,该库的构建流程无法读取项目根目录的SDK版本配置,进而抛出
compileSdkVersion is not specified错误
日志里提到的compileJava/compileKotlin JVM版本不一致、API弃用、kotlin-android-extensions插件弃用都属于不阻断构建的警告,不是这次失败的诱因。
解决步骤
按顺序操作即可:
- 优先升级依赖到适配版本
先把react-native-ad-manager升级到官方最新版,最新版本已经合入了Gradle 7+的适配代码:
升级完成后执行# npm用户执行 npm install react-native-ad-manager@latest # yarn用户执行 yarn add react-native-ad-manager@latestnpx expo prebuild --clean清理旧的原生构建缓存,再重新触发打包。 - 如果最新版仍存在兼容问题(部分维护滞后的分支可能没合入适配代码),直接用patch-package打本地补丁,不需要等官方发版:
- 先安装patch-package工具:
npm i patch-package -D - 打开
node_modules/react-native-ad-manager/android/build.gradle文件,做两处修改:- 把第23行的
apply plugin: 'maven'替换为apply plugin: 'maven-publish' - 在
android {}配置块内补充compileSdkVersion配置,版本号和你项目当前使用的compileSdk版本一致即可,比如Expo SDK 50/51对应版本为34:android { compileSdkVersion 34 // 替换成你项目里配置的compileSdk版本 // 原有buildToolsVersion、defaultConfig等配置全部保留,不要修改 }
- 把第23行的
- 修改完成后执行
npx patch-package react-native-ad-manager生成永久补丁,后续重新安装依赖时补丁会自动生效,不会丢失修改。
- 先安装patch-package工具:
- 构建前清理全量缓存,避免旧缓存干扰:
# 重装依赖 rm -rf node_modules && npm install # 清理原生预构建缓存 npx expo prebuild --clean # 如果用EAS构建,加--clear-cache参数拉取干净构建环境 eas build --platform android --clear-cache - 可选:处理非阻断警告
如果构建成功后想清理日志里的警告,可以做两处调整:- JVM版本不一致:在
android/gradle.properties中添加kotlin.jvm.target.validation.mode=warning,或者通过expo-build-properties插件把Java、Kotlin的编译目标版本统一设置为同一个版本(比如17) - kotlin-android-extensions弃用警告:属于依赖内部的配置问题,不影响打包和运行,不需要额外处理,等依赖官方后续迭代更新即可。
- JVM版本不一致:在
注意:不要直接修改node_modules内的文件而不生成补丁,下次执行依赖安装时所有修改都会被重置,构建会再次失败。
内容的提问来源于stack exchange,提问作者The.Kingslayer
相关产品推荐
相关产品推荐

