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

React Native应用仅安卓端启动崩溃,报No source URL loaded错误

问题根因定位

该报错本质是React Native安卓端加载JS bundle时找不到有效的源URL,JS执行上下文初始化失败,iOS端因为bundle加载逻辑和安卓存在差异所以不受影响

排查修复步骤
  • 验证metro服务链路
    首先确认启动应用前已经正常运行metro服务,真机调试场景下必须先执行adb reverse tcp:8081 tcp:8081完成端口映射,检查本地有没有代理、防火墙拦截8081端口的本地连接。
    如果是release包启动失败,检查android/app/build.gradle中的bundle打包配置,确认assembleRelease任务没有跳过JS bundle生成步骤,生成的bundle文件存在于assets/index.android.bundle路径。

  • 检查原生初始化配置
    定位到安卓项目的MainApplication.java文件,确认getJSBundleFile()方法的返回值是否有效,有没有自定义的路径判断逻辑在崩溃后触发异常分支返回空值;同时检查是否有新增自定义JSIModule未正确注册,导致实例初始化时序异常,source URL还没加载就触发了SourceCodeModule的常量读取。

  • 执行全量缓存清理
    你之前执行的清理步骤不完整,按顺序执行以下命令:

    # 重置metro缓存
    npm start -- --reset-cache
    # 清理安卓构建缓存
    cd android && ./gradlew cleanBuildCache
    # 重新安装依赖
    rm -rf node_modules && npm install
    # 删除安卓本地构建产物
    rm -rf android/app/build
    

    如果你使用Expo框架开发,额外执行npx expo prebuild --clean重新生成原生配置文件。

  • 验证依赖兼容性
    回忆崩溃前是否有升级React Native版本、新增第三方原生依赖?部分原生库(如react-native-reanimated、Realm等)如果和当前RN版本不兼容,会抢占JS上下文初始化时机,导致source URL未被正常注入,可以先回退最近新增的依赖验证是否恢复。
    如果你开启了Hermes引擎,检查android/app/build.gradle中的Hermes配置是否完整,没有同时开启旧版JSVM开关导致冲突。

临时验证方案

你可以手动将JS bundle打包到安卓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

执行完成后重新启动应用,如果可以正常运行,说明问题出在metro动态加载bundle的链路上,重点排查端口映射、metro配置即可。

内容的提问来源于stack exchange,提问作者Y E

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:04