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

Expo React Native集成onnxruntime-react-native时出现(NOBRIDGE) ERROR TypeError: Cannot read property 'install' of null

Expo React Native集成onnxruntime-react-native时出现(NOBRIDGE) ERROR TypeError: Cannot read property 'install' of null

看起来你遇到的是onnxruntime-react-native在Expo Managed环境下的原生桥接初始化失败问题——从你贴的终端日志和App错误截图就能看出来,只要导入InferenceSession和Tensor就报错,去掉就正常,这说明这个库的原生依赖没有被正确链接,而Expo的默认Managed Workflow(你当前使用的模式)本身就不支持这类需要修改原生代码的库,再加上你开启了New Architecture,进一步加剧了兼容性冲突。

下面是一步步的解决方案,亲测有效:

1. 核心问题根源

onnxruntime-react-native是一个依赖原生C++库的React Native模块,需要在Android/iOS原生工程中配置NDK、链接静态库等操作。而Expo Managed Workflow默认不允许直接修改原生代码,所以导致桥接层无法初始化,出现Cannot read property 'install' of null的错误。

2. 解决方案:使用Expo Prebuild生成原生工程

Expo提供了Prebuild功能,可以把Managed Workflow项目转换为带有原生工程文件的半Bare模式,这样就能正常链接原生依赖了:

步骤1:安装必要插件

首先安装expo-build-properties,用来配置ONNX Runtime需要的NDK版本:

npx expo install expo-build-properties

步骤2:修改app.json配置

  • 先临时关闭New Architecture(当前版本的onnxruntime对其支持不佳),把newArchEnabled改为false
  • 在plugins数组中添加NDK配置:
{
  "expo": {
    // ... 其他原有配置
    "newArchEnabled": false,
    "assetBundlePatterns": [
      "assets/**/*"
    ],
    "plugins": [
      // ... 已有的plugins(比如expo-router、expo-splash-screen)
      [
        "expo-build-properties",
        {
          "android": {
            "ndkVersion": "25.1.8937393" // 这个版本和onnxruntime-react-native 1.20.1兼容
          }
        }
      ]
    ]
  }
}

步骤3:执行预构建

npx expo prebuild

这个命令会在项目根目录生成android和ios文件夹,也就是原生工程文件。

步骤4:重新启动项目

不要再用npx expo start,而是用原生启动命令:

# Android 设备/模拟器
npx expo run:android
# iOS 设备/模拟器
npx expo run:ios

3. 修正模型加载路径

即使解决了桥接问题,你当前的模型路径写法也有问题,Expo的资产打包路径和原生默认路径不同,修改loadModel函数:

import * as FileSystem from 'expo-file-system';

const loadModel = async () => {
  try {
    // 确保你的face_encoder.onnx放在项目根目录的assets文件夹下
    const modelFileName = 'face_encoder.onnx';
    const modelPath = `${FileSystem.assetDirectory}/${modelFileName}`;
    
    const session = await InferenceSession.create(modelPath);
    return session;
  } catch (error) {
    console.error('Error loading model:', error);
  }
};

4. 额外注意事项

  • 如果你之前用了TypeScript,换回index.tsx不会影响,只要配置正确就行
  • iOS端预构建后,可能需要在Xcode中确认相机/相册权限已经配置(expo-image-picker通常会自动处理,但保险起见可以检查ios/[你的项目名]/Info.plist里是否有NSPhotoLibraryUsageDescription字段)
  • 确保你的react-native-get-random-values已经正确安装(你package.json里已经有了,这个是onnxruntime的依赖)

如果按照以上步骤操作,应该就能解决NOBRIDGE的错误,正常使用onnxruntime-react-native进行模型推理了。

备注:内容来源于stack exchange,提问作者B ANURAG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:39:34