React Native升级后报TypeError: undefined is not a function求助
解决React Native 0.47+中react-native-account-manager过时导致的升级错误
你遇到的问题核心其实很明确:react-native-account-manager这个库已经停止维护,完全不兼容React Native 0.47及以上版本——你的settings.gradle和应用级build.gradle配置是完全符合旧版RN模块引入规范的,和引入方式关系不大,问题出在库本身的代码跟不上RN的版本迭代。
RN 0.47版本对原生模块的注册机制、gradle配置逻辑都做了不少变更,而这个库最后一次更新还是多年前,自然会出现适配问题。下面给你两个可行的解决方向:
方向一:手动修改旧库适配新版本(适合必须用原库的场景)
如果你因为业务原因一定要用这个库,需要动手修改它的Android原生代码:
- 更新模块注册逻辑:RN 0.47之后废弃了旧的
createReactPackage()方式,需要让AccountManagerPackage实现ReactPackage接口,并重写createNativeModules和createViewManagers两个方法,把模块注册逻辑改成新版RN要求的格式。 - 同步gradle配置:打开库的
android/build.gradle文件,把compileSdkVersion、buildToolsVersion改成和你的RN项目一致的版本,同时把依赖声明里的compile替换成implementation(RN新版本的gradle已经废弃了compile关键字)。 - 修复RN API兼容性:检查库中使用的RN原生API,比如
ReactApplicationContext的相关方法,把已经废弃的调用替换成新版RN提供的替代API。
方向二:替换为活跃维护的替代库(更推荐)
从长期维护角度看,更稳妥的方式是换成目前还在活跃更新的同类库,比如:
- react-native-keychain:支持Android和iOS双平台,提供安全的账号、密码存储功能,完全适配最新版RN,能覆盖原库的核心需求。
- expo-secure-store:如果你是基于Expo开发的项目,这个官方维护的库可以安全存储敏感信息,用法也很简单。
快速排查确认引入问题(可选)
虽然大概率是库本身的问题,但可以快速验证引入是否正确:
- 执行
cd android && ./gradlew clean清理gradle缓存,然后重新运行react-native run-android试试。 - 检查项目的
MainApplication.java文件,确认是否已经把new AccountManagerPackage()添加到getPackages()的列表中(旧版RN的注册方式)。
内容的提问来源于stack exchange,提问作者Ketan Malhotra
相关产品推荐
相关产品推荐

