You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:10:35