使用react-native-nordic-dfu时NativeModules无RNNordicDfu属性致崩溃求助
问题描述
使用react-native-nordic-dfu库时,调用后应用崩溃,报错:TypeError: Cannot read property 'startDFU' of undefined
错误出现在node_modules\react-native-nordic-dfu\index.js第2行,该行通过const { RNNordicDfu } = NativeModules;定义RNNordicDfu,但打印发现NativeModules中无此属性。已尝试重新安装包但无效。
项目依赖:
"dependencies": { "buffer": "^6.0.3", "convert-string": "^0.1.0", "expo": "~47.0.12", "expo-splash-screen": "~0.17.5", "expo-status-bar": "~1.4.2", "react": "18.1.0", "react-native": "0.70.8", "react-native-ble-manager": "^8.6.0", "react-native-nordic-dfu": "^3.2.1", "react-native-quick-base64": "^2.0.5" },
当前Node版本:v18.15.0,测试设备:三星Galaxy S22 Ultra。
解决方案
手动触发链接并清理构建
React Native 0.60+支持自动链接,但部分库可能存在兼容问题,执行以下命令手动链接:npx react-native link react-native-nordic-dfu链接完成后清理缓存并重新构建:
npx react-native clean cd android && ./gradlew clean cd .. && npx react-native run-android验证Android原生配置
检查android/app/src/main/java/[你的包名]/MainApplication.java,确认RNNordicDfuPackage已添加到getPackages()方法:import no.nordicsemi.android.dfu.RNNordicDfuPackage; @Override protected List<ReactPackage> getPackages() { List<ReactPackage> packages = new PackageList(this).getPackages(); packages.add(new RNNordicDfuPackage()); return packages; }同时检查
android/settings.gradle是否包含:include ':react-native-nordic-dfu' project(':react-native-nordic-dfu').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-nordic-dfu/android')确认版本兼容性
检查react-native-nordic-dfu@3.2.1是否支持React Native 0.70.8,尝试升级到最新版本:npm install react-native-nordic-dfu@latest --save升级后重复清理、构建步骤。
适配Expo环境
若使用Expo managed workflow,react-native-nordic-dfu可能不兼容,需切换到bare workflow或寻找替代库;若已为bare workflow,执行预构建清理:expo prebuild --clean彻底清理依赖与缓存
删除node_modules、锁文件后重新安装:rm -rf node_modules package-lock.json npm install清除Metro缓存:
npx react-native start --reset-cache
内容的提问来源于stack exchange,提问作者Ash West

