React Native Keychain安卓getSupportedBiometryType空引用报错
react-native-keychain安卓端启动报错:Cannot read property 'getSupportedBiometryType' of null
已完成配置操作
- 执行
yarn add react-native-keychain安装依赖;针对React Native 0.59及以下版本执行react-native link react-native-keychain命令,同步检查MainApplication.java文件确认包已正确注册,若link流程异常则参考手动安装方案处理 - 进入iOS目录执行
pod install,完成iOS端依赖安装 - 为适配FaceID能力,在
Info.plist文件中添加NSFaceIDUsageDescription权限声明,所有配置完成后重建安卓、iOS端项目
异常现象
配置完成后iOS端运行状态正常,getSupportedBiometryType方法可根据设备生物认证的启用状态,正常返回对应字符串或null;但安卓端启动应用时触发渲染错误,报错信息如下:
Cannot read property 'getSupportedBiometryType' of null
后续已尝试重新执行react-native link命令、对照官方指南完成安卓端全流程手动安装,均未解决该问题。
当前项目核心依赖版本
- react-native:0.64.2
- react-native-keychain:^8.1.0
附参考材料
- Keychain库引入截图
.getSupportedBiometryType()方法调用截图- 安卓设备端报错截图
修复方案
该报错的核心原因是安卓端Keychain Native模块未被正确注册,JS侧读取到的模块对象为null,针对当前使用的RN0.64.2 + react-native-keychain@8.1.0版本组合,按以下步骤操作即可修复:
- 全量清理构建缓存,排除旧构建产物干扰,在项目根目录依次执行以下命令:
后续启动Metro服务时追加yarn cache clean cd android && ./gradlew clean && cd ..--reset-cache参数,避免JS缓存影响。 - 移除手动link产生的冗余配置。RN0.60及以上版本默认开启Autolinking,无需手动执行link操作,之前手动执行link、手动添加的配置反而会造成模块重复注册、加载失败:
- 打开
android/settings.gradle,删除所有手动添加的react-native-keychain引入配置,类似include ':react-native-keychain'的手动配置项全部移除 - 打开
android/app/src/main/java/[你的应用包名]/MainApplication.java,检查getPackages()方法,删除手动实例化KeychainPackage的相关代码,Autolinking会自动完成模块注册
- 打开
- 校验安卓构建配置:react-native-keychain@8.x要求安卓端最小SDK版本≥23,打开
android/build.gradle,确认全局minSdkVersion配置符合要求:buildscript { ext { // 其余配置保持不变 minSdkVersion = 23 } } - 若项目开启了ProGuard代码混淆,打开
android/app/proguard-rules.pro,添加以下混淆规则,避免Keychain相关类被混淆裁剪:-keep class com.oblador.keychain.** { *; } - 完成上述操作后,重新执行构建命令启动安卓端即可:
npx react-native run-android
补充说明:同版本组合下90%以上的该类报错,都是手动link产生的冗余配置、minSdkVersion不满足要求、构建缓存未清理三类原因导致,按步骤排查即可解决,无需额外修改源码。
内容的提问来源于stack exchange,提问作者Branislav Brnjos
相关产品推荐
相关产品推荐

