React Native升级Gradle7.X+后崩溃:无法加载脚本及提取调试元数据求助
问题与解决方案
问题背景
项目基于Kotlin,包含React Native 0.61.5模块,在Gradle Plugin 4.0.1 + Gradle 6.6下运行正常。新增Compose模块后必须升级Gradle到7.X及以上(当前为Plugin 7.2.2 + Gradle 7.5.2),升级后应用崩溃,出现以下错误:
Unable to load script.Make sure you are either running a Metro server or that your bundle 'index.android.bundle' is packaged correctly for release
Unable to extract native debug metadata
核心解决方案
1. 修复React Native Bundle打包逻辑
Gradle 7+的构建流程和资源打包规则有变化,React Native 0.61.5的默认打包脚本不兼容,需手动调整:
- 在
android/app/build.gradle中,确保bundleReleaseJsAndAssets任务正确执行,添加依赖关系:
project.ext.react = [ bundleInRelease: true, bundleInDebug: false ] // 强制打包任务在构建APK前执行 tasks.whenTaskAdded { task -> if (task.name.startsWith('packageRelease')) { task.dependsOn 'bundleReleaseJsAndAssets' } }
- 若
index.android.bundle未生成在android/app/src/main/assets目录,手动执行打包命令:
npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
2. 解决Native Debug Metadata提取问题
Gradle 7+对原生调试元数据的处理方式改变,React Native 0.61.5的NDK配置不匹配:
- 在
android/build.gradle中固定NDK版本,和Docker镜像中的版本保持一致:
buildscript { ext { ndkVersion = "21.4.7075529" } }
- 在
android/app/build.gradle的android块中添加打包配置:
android { packagingOptions { pickFirst '**/libc++_shared.so' exclude '**/libhermes.so' // 未启用Hermes时添加该配置 } ndkVersion rootProject.ext.ndkVersion }
3. Docker构建环境适配
当前Docker镜像的Node版本10.16.3和React Native 0.61.5兼容,但需补充Gradle配置并确保构建流程完整:
- 在Dockerfile中添加Gradle安装步骤(若未配置):
ENV GRADLE_VERSION=7.5.2 RUN curl -sL https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip -o /tmp/gradle.zip \ && unzip -q /tmp/gradle.zip -d /opt \ && ln -s /opt/gradle-${GRADLE_VERSION}/bin/gradle /usr/local/bin/gradle \ && rm /tmp/gradle.zip
- 在Docker构建脚本中补充依赖安装和bundle打包步骤:
yarn install npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/ ./gradlew assembleRelease
验证步骤
- 本地执行手动bundle命令,确认
index.android.bundle生成在指定目录 - 运行
./gradlew clean assembleRelease,检查构建日志无报错 - 安装APK到设备,确认应用正常启动无崩溃
内容的提问来源于stack exchange,提问作者Lucas Esteves
相关产品推荐
相关产品推荐

