使用react-native-executorch加载ALL_MINILM_L6_V2模型时Android构建报错(HuggingFaceTokenizer.initHybrid实现未找到)
我之前帮不少开发者解决过类似的Expo + react-native-executorch的问题,这个报错本质是原生层的Executorch库没有正确加载,或者缺少ARM架构的运行时支持,结合你用Expo prebuild的场景,给你几个一步步的解决方案:
1. 先确认依赖版本兼容性
首先检查你的package.json里react-native-executorch和Expo SDK的版本是否匹配,建议使用最新的稳定版,比如执行以下命令更新依赖:
npm install react-native-executorch@latest npx expo install --fix
更新后记得重新运行npx expo prebuild,确保原生文件同步最新的依赖配置。
2. 配置Android NDK架构支持(关键步骤)
Executorch需要ARM架构的运行时库,而Expo默认的构建配置可能没有包含所有必要的ABI。你可以用expo-build-properties插件来配置:
- 先安装插件:
npx expo install expo-build-properties
- 然后在
app.json或app.config.js中添加以下配置,指定Android需要的ABI:
{ "expo": { "plugins": [ [ "expo-build-properties", { "android": { "ndk": { "abiFilters": ["armeabi-v7a", "arm64-v8a"] } } } ] ] } }
这个配置会告诉Expo构建时包含ARM架构的库,解决Executorch找不到原生实现的问题。
3. 确保原生库正确加载(如果上述步骤还不行)
如果还是报错,可能需要手动在Android原生代码中加载Executorch库。因为你用了npx expo prebuild,可以找到android/app/src/main/java/[你的包名]/MainApplication.java文件,在onCreate方法里添加加载语句:
@Override public void onCreate() { super.onCreate(); // 添加这行代码 System.loadLibrary("pytorch_executorch"); }
⚠️ 注意:每次运行npx expo prebuild --clean时,这个修改会被覆盖,所以最好把这个操作写成Expo插件,或者每次prebuild后手动添加(适合临时调试)。
4. 清理构建缓存并重新构建
缓存问题经常导致依赖加载异常,执行以下命令清理缓存后重新构建:
npx expo prebuild --clean ./gradlew clean # 在android目录下执行,或者用npx expo run:android --clean npx expo run:android
5. 检查模型加载的代码逻辑
确保你的useTextEmbeddings调用是在组件正确挂载的环境中,比如在函数组件的顶层或者useEffect里(不过useTextEmbeddings是自定义hook,应该可以直接在顶层使用),另外确认ALL_MINILM_L6_V2和ALL_MINILM_L6_V2_TOKENIZER的导入路径正确,没有拼写错误。
如果还是有问题,可以尝试打印一下模型和tokenizer的加载状态,看是否在初始化时就出现了异常,帮助定位问题。
内容来源于stack exchange

