ReactPackage类需声明为抽象类或实现createJSModules抽象方法求助
解决ReactPackage报错"class must either be declared abstract or implement abstract method called createJSModules"
嘿,这个坑我踩过好几次了!本质是React Native版本迭代带来的API变更问题——旧版本的ReactPackage接口要求必须实现createJSModules()方法,但在RN 0.47及以后的版本里,这个方法已经被废弃移除了。你的代码没处理这个兼容问题,所以编译器才会抛出这个错误。
看你贴的代码片段,你的ReactPackage类应该只实现了createNativeModules()和createViewManagers()(虽然没贴全,但能猜出来),但当前环境里的ReactPackage接口还在强制要求createJSModules方法,所以才会报错。
给你两种解决方案,选适合你的:
方案一:添加空的
createJSModules实现(最常用)
直接在你的Package类里补上这个方法,返回空列表就行,这样既能满足旧接口的要求,也不影响新版本的功能。修改后的代码大概是这样:package com.myCompany.asqgooglesignin; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ASQGoogleSignInPackage implements ReactPackage { @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); // 这里添加你的NativeModule实例,比如: // modules.add(new ASQGoogleSignInModule(reactContext)); return modules; } @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { // 没有自定义View的话,返回空列表即可 return Collections.emptyList(); } // 补上这个方法,解决接口实现问题 @Override public List<Class<? extends com.facebook.react.bridge.JSModule>> createJSModules() { return Collections.emptyList(); } }方案二:升级React Native到0.47+版本
如果你愿意升级RN版本,新版本的ReactPackage接口已经移除了createJSModules方法,直接实现剩下的两个方法就不会报错了。不过升级前记得先备份项目,处理可能的兼容性问题。
另外提醒下:出现这个问题大概率是你参考的文档版本和项目实际使用的RN版本不匹配,比如你看的是新版本官方文档,但项目依赖的是旧版RN,或者反过来。以后开发时尽量保持文档和依赖版本一致哦。
内容的提问来源于stack exchange,提问作者Ilja
相关产品推荐
相关产品推荐

