卸载react-native-mmkv后安卓运行报错iOS端正常如何排查解决
问题根因
该报错核心原因是安卓构建链路/代码中残留了react-native-mmkv的引用:你卸载npm包后,JS侧缓存、安卓Gradle构建缓存、手动链接的原生配置、代码中未清理的MMKV调用逻辑任意一处残留,都会出现JS侧尝试调用MMKV原生初始化方法、但原生包已经被移除的报错。iOS端无异常是因为iOS执行pod install时会自动同步移除不存在的pod依赖,缓存清理逻辑和安卓有差异,不会触发这类残留问题。
排查解决步骤
按以下顺序操作,每步做完可以先尝试运行验证,不用一次性全做完:
- 首先清理JS侧全量缓存
在项目根目录执行以下命令,排除Metro打包缓存旧代码的问题:rm -rf node_modules # 根据你用的包管理器删对应锁文件 rm -f yarn.lock package-lock.json pnpm-lock.yaml # 重新安装依赖 npm install # 带重置缓存参数启动Metro服务 npx react-native start --reset-cache - 清理安卓侧构建缓存与依赖残留
进入项目下的android目录执行:
如果grep命令还能搜到MMKV相关依赖,手动检查以下位置的手动配置并删除:# 停止所有运行中的Gradle进程 ./gradlew --stop # 清空所有历史构建产物 ./gradlew clean # 检查自动链接依赖列表,确认MMKV已被移除 ./gradlew app:dependencies | grep mmkvandroid/settings.gradle中手动添加的MMKV项目引入android/app/build.gradle中手动添加的MMKV编译依赖android/app/src/main/目录下MainApplication文件中手动注册的MMKVPackage代码与对应导包语句
- 全局扫描代码中残留的MMKV调用
全局搜索所有.js/.ts/.tsx后缀的文件,删除所有MMKV相关的导入、初始化逻辑,重点检查以下场景:- 自定义封装的存储工具类中遗留的MMKV实例化代码
- 状态持久化配置(redux-persist、zustand持久化、mobx持久化等)是否还指定MMKV作为存储引擎
- 项目引入的三方依赖是否存在硬依赖react-native-mmkv的情况,如果有这类依赖要么替换/卸载对应三方库,要么重新安装react-native-mmkv
- 清理测试设备上的旧安装包
直接卸载安卓模拟器/真机上已经安装的旧版本APK,避免覆盖安装时旧应用的本地缓存触发MMKV调用逻辑,之后再重新通过Android Studio运行安装新包。
补充说明
哪怕MMKV正常安装的场景下,开启Chrome远程调试也会触发类似JSI相关报错,因为远程调试模式下JSI接口会被禁用,调试时如果需要用MMKV请改用Hermes内置的调试器,不要用Chrome远程调试。
内容的提问来源于stack exchange,提问作者djes
相关产品推荐
相关产品推荐

