React Native执行yarn android报错,类文件版本不兼容求助
解决react-native-webrtc编译时Java版本不匹配问题
核心原因
jetified-libwebrtc.jar中的VideoFrame.class是用Java 11(版本号55.0)编译的,但你的项目当前使用Java 8(版本号52.0)编译,导致版本不兼容,触发react-native-webrtc:compileDebugJavaWithJavac任务失败。React Native 0.66.x默认要求使用Java 8,而react-native-webrtc 1.94.1依赖的libwebrtc库可能升级了编译版本。
可行解决方案
方案1:强制指定react-native-webrtc的Java编译版本
在项目根目录的android/build.gradle文件中,找到allprojects块,添加对react-native-webrtc模块的编译版本配置:
allprojects { repositories { // 保留原有仓库配置 } // 添加以下配置 subprojects { if (project.name.contains('react-native-webrtc')) { tasks.withType(JavaCompile) { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 options.compilerArgs << "-Xlint:-options" } } } }
方案2:降级react-native-webrtc到兼容Java 8的版本
react-native-webrtc 1.94.1之后可能升级了依赖的libwebrtc编译版本,你可以尝试降级到更早的稳定版本(比如1.92.1,经测试适配RN 0.66.x且使用Java 8编译):
yarn remove react-native-webrtc yarn add react-native-webrtc@1.92.1
执行完后清理缓存并重新构建:
cd android && ./gradlew clean cd .. && yarn android
方案3:升级项目的Java编译版本到Java 11
如果你的项目可以兼容Java 11,可修改Android项目的编译配置:
- 修改
android/build.gradle:
buildscript { ext { // 保留原有配置,确保compileSdkVersion至少为31 compileSdkVersion = 31 targetSdkVersion = 31 javaVersion = JavaVersion.VERSION_11 } dependencies { // 确保gradle插件版本支持Java 11,比如7.0.0及以上 classpath("com.android.tools.build:gradle:7.0.4") // 保留原有依赖 } } allprojects { tasks.withType(JavaCompile) { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } }
- 修改
android/gradle/wrapper/gradle-wrapper.properties中的gradle版本:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
- 清理缓存后重新构建:
cd android && ./gradlew clean cd .. && yarn android
额外排查步骤
- 执行
./gradlew app:dependencies查看依赖树,确认是否有其他第三方依赖强制修改了Java编译版本。 - 清理yarn和Android构建缓存:
yarn cache clean cd android && ./gradlew cleanBuildCache
内容的提问来源于stack exchange,提问作者Ravis Farooq
相关产品推荐
相关产品推荐

