React Native升级至0.70.1后Android端Hermes文件缺失及依赖冲突问题
升级React Native 0.64.2到0.70.1遇到的Hermes及依赖冲突问题
背景
我正在维护一个旧React Native项目,需将RN版本从^0.64.2升级到0.70.1。执行npx react-native upgrade更新依赖版本后,按照官方文档修改了android/app/build.gradle以开启Hermes:
project.ext.react = [ enableHermes: true // clean and rebuild if changing ] ... dependencies { ... if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor } ... }
第一次构建错误
在android目录执行./gradlew clean并运行npx react-native run-android,出现以下错误:
BUILD FAILED in 9s error Failed to install the app. Make sure you have the Android development environment set up. Error: Command failed: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:checkDebugAarMetadata'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Failed to transform hermes-debug.aar to match attributes {artifactType=android-aar-metadata}. > Execution failed for JetifyTransform: D:\{ProjectFolder}\node_modules\hermes-engine\android\hermes-debug.aar. > Transform's input file does not exist: D:\{ProjectFolder}\node_modules\hermes-engine\android\hermes-debug.aar.
排查后发现node_modules目录下不存在hermes-engine文件夹。
手动添加依赖后的冲突问题
尝试在package.json中手动添加hermes-engine并执行npm install,又出现依赖冲突错误:
npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: react-query@3.34.2 npm ERR! Found: react@18.1.0 npm ERR! node_modules/react npm ERR! react@"18.1.0" from the root project npm ERR! peer react@"*" from @jsamr/react-native-li@2.3.1 npm ERR! node_modules/@jsamr/react-native-li npm ERR! @jsamr/react-native-li@"^2.3.0" from react-native-render-html@6.3.4 npm ERR! node_modules/react-native-render-html npm ERR! react-native-render-html@"^6.3.4" from the root project npm ERR! 27 more (@react-native-community/art, ...) npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer react@"^16.8.0 || ^17.0.0" from react-query@3.34.2 npm ERR! node_modules/react-query npm ERR! react-query@"^3.34.2" from the root project npm ERR! npm ERR! Conflicting peer dependency: react@17.0.2 npm ERR! node_modules/react npm ERR! peer react@"^16.8.0 || ^17.0.0" from react-query@3.34.2 npm ERR! node_modules/react-query npm ERR! react-query@"^3.34.2" from the root project npm ERR! npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force, or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
项目package.json内容
{ "name": "MyApp", "version": "1.0.0", "private": true, "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", "start": "react-native start", "test": "jest", "lint": "eslint ." }, "dependencies": { "@notifee/react-native": "^3.0.4", "@react-native-async-storage/async-storage": "^1.17.10", "@react-native-community/art": "^1.2.0", "@react-native-community/datetimepicker": "^3.5.2", "@react-native-firebase/app": "^12.9.0", "@react-native-firebase/messaging": "^12.9.0", "@react-navigation/material-top-tabs": "^6.2.1", "@react-navigation/native": "^6.0.1", "@react-navigation/stack": "^6.2.1", "axios": "^0.24.0", "fbjs": "^3.0.4", "jest": "^26.6.3", "jwt-decode": "^3.1.2", "moment": "^2.29.3", "moment-timezone": "^0.5.34", "prop-types": "^15.8.1", "react": "18.1.0", "react-native": "0.70.1", "react-native-biometrics": "^2.1.4", "react-native-camera": "^3.35.0", "react-native-chart-kit": "^6.12.0", "react-native-elements": "^2.0.4", "react-native-file-viewer": "^2.1.1", "react-native-fs": "^2.20.0", "react-native-gesture-handler": "^1.10.3", "react-native-image-crop-picker": "^0.32.2", "react-native-modal": "^11.5.6", "react-native-pager-view": "^5.4.24", "react-native-pdf": "^6.2.0", "react-native-picker-select": "^8.0.0", "react-native-pie-chart": "^2.0.2", "react-native-render-html": "^6.3.4", "react-native-safe-area-context": "^3.0.2", "react-native-screens": "^3.13.1", "react-native-simple-toast": "^1.1.2", "react-native-svg": "^12.1.1", "react-native-swipe-list-view": "^3.2.9", "react-native-tab-view": "^3.1.1", "react-native-vector-icons": "^7.0.0", "react-navigation": "^4.4.0", "react-query": "^3.34.2", "react-redux": "^7.2.0", "redux": "^4.0.5", "redux-devtools-extension": "^2.13.8", "redux-thunk": "^2.3.0", "toggle-switch-react-native": "^3.3.0" }, "devDependencies": { "@react-native-community/eslint-config": "^2.0.0", "babel-plugin-root-import": "^6.5.0", "eslint": "^7.14.0", "react-test-renderer": "^17.0.1" }, "jest": { "preset": "react-native" } }
内容的提问来源于stack exchange,提问作者Pawich S.
相关产品推荐
相关产品推荐

