React Native升级targetSDK至31时:react-native-pager-view编译任务失败求助
React Native 0.63.3升级targetSdkVersion至31后编译失败
环境与操作背景
- React 版本:
"react": "16.13.1" - React Native 版本:
"react-native": "0.63.3" - 操作:因Google Play控制台要求将targetSdkVersion从30升级至31,已将项目的
compileSdkVersion和targetSdkVersion均修改为31 - 触发命令:
yarn android - 核心错误:任务
:react-native-pager-view:compileDebugJavaWithJavac执行失败
完整编译日志(中文翻译版)
yarn android yarn run v1.22.10 $ react-native run-android 信息:正在运行jetifier以将库迁移到AndroidX。可使用"--no-jetifier"标志禁用此操作。 Jetifier发现6255个文件需要正向迁移,使用4个工作进程... 信息:JS服务器已在运行。 信息:正在安装应用... > 配置项目 :tp-react-native-bluetooth-printer 警告:配置'compile'已过时,已被'implementation'和'api'取代。 该配置即将被移除。 Kotlin Gradle插件在多个子项目中被重复加载,这不受支持且可能导致构建失败。 这种情况可能发生在子项目使用Gradle 'plugins { ... }' DSL应用Kotlin插件且指定了明确版本时,即使版本相同也会出现。 请将Kotlin插件添加到公共父项目或根项目中,然后移除子项目中的版本指定。 如果父项目不需要该插件,请在插件行添加'apply false'。 Kotlin插件已在以下项目中加载:':react-native-pager-view', ':react-native-webview' > 任务 :react-native-pager-view:compileDebugJavaWithJavac 执行失败 构建中使用了已废弃的Gradle特性,导致其与Gradle 7.0不兼容。 使用'--warning-mode all'查看单个弃用警告。 63个可执行任务:2个已执行,61个已是最新状态 [致命错误] gradle-3.5.3.pom:7:3: 元素类型"hr"必须以匹配的结束标签"</hr>"终止。 [致命错误] builder-3.5.3.pom:7:3: 元素类型"hr"必须以匹配的结束标签"</hr>"终止。 [致命错误] lint-gradle-api-26.5.3.pom:7:3: 元素类型"hr"必须以匹配的结束标签"</hr>"终止。 [致命错误] gradle-api-3.5.3.pom:7:3: 元素类型"hr"必须以匹配的结束标签"</hr>"终止。 [致命错误] crash-26.5.3.pom:7:3: 元素类型"hr"必须以匹配的结束标签"</hr>"终止。 [致命错误] bundletool-0.9.0.pom:7:3: 元素类型"hr"必须以匹配的结束标签"</hr>"终止。 [致命错误] jetifier-core-1.0.0-beta04.pom:7:3: 元素类型"hr"必须以匹配的结束标签"</hr>"终止。 [致命错误] jetifier-processor-1.0.0-beta04.pom:7:3: 元素类型"hr"必须以匹配的结束标签终止 编译器(1.8.0_272)发生异常。请在检查Bug数据库是否存在重复问题后,通过Java错误报告页面提交错误报告。请在报告中包含你的程序和以下诊断信息。谢谢。 java.lang.AssertionError: annotationType(): 无法识别的属性名称MODULE (class com.sun.tools.javac.util.UnsharedNameTable$NameImpl) at com.sun.tools.javac.util.Assert.error(Assert.java:133) 构建失败,出现异常。 * 错误原因: 任务':react-native-pager-view:compileDebugJavaWithJavac'执行失败。 > 编译失败;请查看编译器错误输出获取详细信息。 * 尝试方案: 使用--stacktrace选项获取堆栈跟踪。使用--info或--debug选项获取更多日志输出。使用--scan获取完整洞察。 * 获取更多帮助请查看官方文档 构建耗时1分7秒 错误:应用安装失败。请确保已正确设置Android开发环境。使用--verbose标志运行CLI获取更多详细信息。 错误:命令执行失败:gradlew.bat app:installDebug -PreactNativeDevServerPort=8081 [致命错误] gradle-3.5.3.pom:7:3: 元素类型"hr"必须以匹配的结束标签"</hr>"终止。 错误:命令以退出码1失败。 信息:查看yarn官方文档了解run命令的相关说明。
解决步骤
修复Maven缓存损坏问题
本地Maven缓存中的pom文件格式错误(hr标签未闭合),需清理相关缓存:- 找到本地Maven缓存目录(默认路径为
~/.m2/repository) - 删除以下目录:
com/android/tools/build/gradle/3.5.3com/android/tools/build/builder/3.5.3com/android/tools/lint/lint-gradle-api/26.5.3com/android/tools/build/gradle-api/3.5.3com/android/tools/build/crash/26.5.3com/android/tools/build/bundletool/0.9.0com/android/tools/jetifier/jetifier-core/1.0.0-beta04com/android/tools/jetifier/jetifier-processor/1.0.0-beta04
- 重新执行
yarn android,让Gradle重新下载正确的依赖文件
- 找到本地Maven缓存目录(默认路径为
解决Kotlin插件重复加载问题
- 在项目根目录的
build.gradle文件中,统一声明Kotlin插件版本并设置apply false:plugins { // 保留原有插件,添加以下内容 id 'org.jetbrains.kotlin.android' version '1.5.31' apply false } - 找到
node_modules/react-native-pager-view/android/build.gradle和node_modules/react-native-webview/android/build.gradle,修改插件引用,移除版本号:// 原代码可能是 id 'org.jetbrains.kotlin.android' version 'x.x.x' // 修改为 id 'org.jetbrains.kotlin.android'
- 在项目根目录的
处理Java编译兼容性错误
- 升级Java版本到11:React Native 0.63.x搭配targetSdkVersion 31时,Java 8易出现兼容性问题,切换到Java 11可解决
MODULE属性未识别的错误。 - 升级
react-native-pager-view版本:旧版本库可能不兼容targetSdkVersion 31,在package.json中更新依赖到兼容0.63.x的最新版本(如^3.0.0),执行yarn install后重新构建。
- 升级Java版本到11:React Native 0.63.x搭配targetSdkVersion 31时,Java 8易出现兼容性问题,切换到Java 11可解决
清理构建缓存
- 执行以下命令彻底清理缓存:
./gradlew clean rm -rf node_modules yarn.lock yarn install yarn android
- 执行以下命令彻底清理缓存:
内容的提问来源于stack exchange,提问作者Baem
相关产品推荐
相关产品推荐

