Expo React Native导入usePreventScreenCapture触发NativeEventEmitter警告
解决方案
确认版本兼容性
检查package.json里expo和expo-screen-capture的版本是否匹配。Expo每个SDK版本对应固定的第三方包版本范围,版本不匹配会导致原生模块接口不兼容。比如使用Expo SDK 49时,要确保expo-screen-capture版本为~12.4.0(对应SDK49的适配版本),可通过Expo官方文档确认对应版本后,执行:npm install expo-screen-capture@对应版本 # 或 yarn add expo-screen-capture@对应版本重新构建开发客户端(Dev Client)
安装expo-screen-capture后必须重新生成Dev Client,否则原生模块无法正确打包进客户端,引发事件发射器方法缺失的警告:- 先清除Expo缓存:
expo r -c - 重新构建对应平台的Dev Client:
# iOS平台 eas build --profile development --platform ios # Android平台 eas build --profile development --platform android
构建完成后,将新的Dev Client安装到设备上再运行项目。
- 先清除Expo缓存:
排查手动链接冲突
如果项目之前有过手动链接原生模块的操作,可能和Expo自动链接机制冲突。检查android/settings.gradle和ios/Podfile中是否存在expo-screen-capture的手动配置,若有则删除,之后重新执行构建。临时规避方案(仅当以上方法无效时使用)
若暂时无法调整版本或重建客户端,可在项目入口文件(如App.js)添加以下代码,手动补全NativeEventEmitter所需方法以消除警告:import { NativeModules } from 'react-native'; const ScreenCaptureModule = NativeModules.ExpoScreenCapture; if (ScreenCaptureModule) { ScreenCaptureModule.addListener = () => {}; ScreenCaptureModule.removeListeners = () => {}; }注意:此方法仅为临时规避,优先推荐版本兼容和重建客户端的根本解决方案。
内容的提问来源于stack exchange,提问作者Laspeed
相关产品推荐
相关产品推荐

