React 18+Kotlin项目isHermesEnabled覆写无匹配方法报错求助
解决React Native + Kotlin中
isHermesEnabled overrides nothing报错的方案 问题描述
项目基于React 18和Kotlin开发,MainApplication.kt文件出现编译报错:
'isHermesEnabled' overrides nothing
MainApplication.kt相关代码如下:
class MainApplication : Application(), ReactApplication { private val mReactNativeHost: ReactNativeHost = object : DefaultReactNativeHost(this) { override fun getUseDeveloperSupport(): Boolean { return BuildConfig.DEBUG } override protected fun getPackages(): ArrayList<ReactPackage?> { @SuppressWarnings("UnnecessaryLocalVariable") val packages: ArrayList<ReactPackage?> = PackageList(this).getPackages() return packages } override fun getJSMainModuleName(): String { return "index.android" } override protected fun getJSBundleFile(): String? { return if (BuildConfig.DEBUG) { super.getJSBundleFile() } else CodePush.getJSBundleFile() } override protected fun getJSIModulePackage(): JSIModulePackage? { return ReanimatedJSIModulePackage() } override protected fun isNewArchEnabled(): Boolean { return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED } override protected fun isHermesEnabled(): Boolean { return BuildConfig.IS_HERMES_ENABLED } }
已尝试的操作:
- 参考过相关方案但未解决问题
- 在
build.gradle中设置:project.ext.react = [ enableHermes: true ] - 在
gradle.properties中设置:hermesEnabled=true
可行解决方法
1. 修正方法访问修饰符
React Native新版本中,DefaultReactNativeHost的isHermesEnabled方法是public而非protected,你需要把重写时的修饰符改成override fun:
override fun isHermesEnabled(): Boolean { return BuildConfig.IS_HERMES_ENABLED }
同时检查其他重写方法(如isNewArchEnabled、getJSIModulePackage)的修饰符,确保和父类定义一致,新版本中这些方法大多已改为public。
2. 验证BuildConfig变量有效性
- 执行
./gradlew clean清理项目缓存,再重新构建,确保gradle配置的enableHermes能正确生成BuildConfig.IS_HERMES_ENABLED字段。 - 查看
app/build/generated/source/buildConfig/debug/[你的包名]/BuildConfig.java文件,确认IS_HERMES_ENABLED存在且值为true。
3. 检查父类方法定义
直接查看DefaultReactNativeHost源码:
- 在Android Studio中按住Ctrl/Cmd点击类名进入源码,确认
isHermesEnabled方法是否存在。 - 如果父类中没有该方法,说明当前React Native版本无需手动重写——Hermes启用状态会自动读取gradle配置,直接删除这个重写方法即可。
4. 同步gradle并重新编译
- 点击Android Studio中的"Sync Project with Gradle Files"按钮,确保配置变更同步。
- 执行
./gradlew assembleDebug重新编译项目,验证报错是否消失。
内容的提问来源于stack exchange,提问作者dlc
相关产品推荐
相关产品推荐

