React Native安卓编译报错ConstantsService未重写getAppScopeKey()方法
React Native安卓端expo-constants编译报错解决方案
报错原因
你遇到的编译错误是expo-constants版本和当前React Native版本不兼容导致的:expo-constants@~11.0.2对应Expo SDK 44,要求React Native版本为0.67+,而你当前使用的React Native 0.66.3对应适配的是Expo SDK 43,配套的expo-constants版本为~10.1.3,版本 mismatch 导致ConstantsInterface接口的抽象方法没有被实现。
解决方案
方案一:降级expo-constants到适配版本(推荐)
这是改动最小的稳定解决方案,操作步骤如下:
- 卸载当前版本的expo-constants
如果你用npm:npm uninstall expo-constants
如果你用yarn:yarn remove expo-constants - 安装适配React Native 0.66.3的版本
如果你用npm:npm install expo-constants@~10.1.3
如果你用yarn:yarn add expo-constants@~10.1.3 - 清理缓存后重新构建
- 进入安卓项目目录执行清理:
cd android && ./gradlew clean - 回到项目根目录启动RN服务并清除缓存:
npx react-native start --reset-cache - 重新执行构建命令即可
- 进入安卓项目目录执行清理:
方案二:手动打补丁适配(临时救急用)
如果你暂时不想调整依赖版本,可以手动修改源码补全缺失的方法,配合patch-package持久化修改:
- 打开报错的ConstantsService.java文件,在ConstantsService类中添加缺失的方法实现:
@Override public String getAppScopeKey() { return null; } - 安装patch-package工具持久化修改:
npm install patch-package --save-dev - 生成补丁包:
npx patch-package expo-constants
后续重新安装依赖时,补丁会自动生效,无需重复修改源码
方案三:升级整体依赖版本
如果你需要使用expo-constants@11.x的新特性,可以将React Native版本升级到0.67+,同时对齐所有Expo相关依赖到SDK 44的对应版本,该方案改动较大,需要同步处理其他依赖的兼容问题,按需选择即可。
额外说明
提示中提到的「使用或重写了已弃用API」是版本不兼容的附带提示,完成版本对齐后会自动消失,不会影响应用正常运行,暂时可以忽略。
内容的提问来源于stack exchange,提问作者Dorian
相关产品推荐
相关产品推荐

