You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:53:19