Expo 48 React Native托管应用Android Gradle构建失败求助
Expo 48 Android构建失败:mergeReleaseResources与StackOverflowError解决指南
错误核心
- 核心失败点:
:app:mergeReleaseResources任务资源编译报错,无法解析values.xml中的资源 - 伴随问题:
java.lang.StackOverflowError,多与资源冲突、Gradle内存不足或依赖嵌套过深相关
分步排查与解决
1. 定位重复/无效资源
资源编译失败90%以上是重复资源ID或XML语法错误导致:
- 本地构建获取详细日志:
日志会明确标出冲突的资源(如重复的string、color),直接定位到对应的XML文件删除或重命名eas build --platform android --local --profile release - 用工具扫描资源冲突:
npx react-native config --check-resources
2. 解决Gradle栈溢出
StackOverflowError通常是堆内存不足:
- 修改
android/gradle.properties,增大JVM内存:org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - 确保Gradle和AGP版本匹配Expo 48要求:
// android/build.gradle buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.2.1' } }
3. 彻底清理缓存
缓存脏数据是常见诱因:
- 清理Expo预构建缓存和Gradle缓存:
npx expo prebuild --clean ./gradlew clean - 重置依赖:
rm -rf node_modules package-lock.json npm install
4. 修复第三方依赖兼容性
Expo 48升级后部分库可能不兼容:
- 用
expo doctor检查依赖:
按照提示升级或替换不兼容的依赖(尤其是涉及Android资源的UI、地图类库)npx expo doctor
5. 规范资源文件命名
Android资源文件名有严格限制:
- 所有资源文件(图片、XML、字体)必须小写,用下划线分隔,不能有特殊字符
- 检查XML文件语法,确保标签闭合、属性值有效
内容的提问来源于stack exchange,提问作者Deji James
相关产品推荐
相关产品推荐

