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

React Native+Expo开发Android Widget遇Gradle兼容及插件失败问题求助

问题解决与方案建议

一、Gradle构建错误修复

1. "Unsupported class file major version 67" 错误

该错误表明项目使用的Gradle版本不兼容当前JDK版本(major version 67对应Java 23)。Gradle对Java版本有明确兼容规则:

  • Gradle 8.7及以上版本支持Java 23
  • 若使用低于8.7的Gradle版本,需降级JDK至对应支持版本(比如Gradle 8.0支持Java 17)

修复步骤:

  • 检查项目Gradle版本:打开android/gradle/wrapper/gradle-wrapper.properties,将distributionUrl升级为https\://services.gradle.org/distributions/gradle-8.7-all.zip或更高版本
  • 确认JDK版本:本地环境用java -version查看,确保与Gradle版本兼容;Expo构建环境可在eas.json中指定JDK版本:
    {
      "build": {
        "preview": {
          "android": {
            "jdkVersion": "23"
          }
        }
      }
    }
    

2. "Failed to apply plugin 'com.facebook.react.rootproject'" 错误

此问题多因React Native版本与Gradle插件版本不匹配导致:

  • 确保android/build.gradle中com.android.tools.build:gradle版本与RN版本兼容(比如RN 0.72+对应Gradle插件7.3.1+)
  • 检查settings.gradle的pluginManagement块,确保正确引入React Native插件仓库:
    pluginManagement {
      repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
        maven { url("$rootDir/../node_modules/react-native/android") }
        maven { url("$rootDir/../node_modules/expo-modules-core/android") }
      }
    }
    
  • 清理缓存后重建:执行./gradlew clean,再重新运行eas build

二、复杂RN+Expo应用的Android Widget开发最优方案

针对依赖繁多的复杂应用,自定义原生Widget是最可控的方案,具体步骤:

  1. 预构建原生项目:执行eas prebuild生成完整Android原生代码,方便手动修改Widget逻辑
  2. 编写原生Widget代码:
    • 在android/app/src/main/java/[你的包名]/widget目录下创建AppWidgetProvider子类,处理Widget创建、更新逻辑
    • 在res/layout中创建Widget布局文件,定义UI样式
    • 在AndroidManifest.xml中注册Widget组件
  3. RN与Widget数据交互:
    • 用SharedPreferences或Room数据库做中间层,RN端通过NativeModule写入数据,Widget端读取更新UI
    • 若需实时更新,通过BroadcastReceiver触发Widget刷新,RN端发送广播通知更新
  4. 规避第三方库适配问题:如果react-native-android-widget、expo-widgets无法适配项目,建议放弃依赖第三方库,自定义实现更灵活,还能避免版本冲突

三、预构建时排除不必要依赖

可通过两种方式排除冗余依赖:

  1. expo-build-properties插件配置:在app.json或app.config.js中添加插件配置,指定要排除的依赖:
    {
      "expo": {
        "plugins": [
          [
            "expo-build-properties",
            {
              "android": {
                "excludeDependencies": ["com.example.unused-dep", "org.unused.lib"]
              }
            }
          ]
        ]
      }
    }
    
  2. Gradle手动排除:打开android/app/build.gradle,在依赖声明中添加exclude规则:
    implementation(project(':react-native-some-library')) {
      exclude group: 'com.unused.group', module: 'unused-module'
    }
    
  3. 先排查冗余依赖:执行./gradlew app:dependencies生成依赖树,分析未被使用的依赖后再排除,避免误删必要依赖

内容的提问来源于stack exchange,提问作者M41b1 Donald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:52:23