I am working on an old React Native app and want to upgrade RN version from version ^0.64.2 to 0.70.1. After using command npx react-native upgrade
, there are changes in number version of dependencies. I also edit build.gradle
in andriod\app
folder as instructed in this document:
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
}
...
}
After that, I run command ./gradlew clean
in android folder and run npx react-native run-android
. Then this error shows up:
BUILD FAILED in 9s
error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.
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. (See https://issuetracker.google.com/issues/158753935)
After taking a while, I also found out that there is no hermes-engine
folder inside node_modules
folder but still have no clue what to do.
Here is my 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"
}
}
Update: The error still occur after I edited package.json and use npm install
to add hermes-engine
. Here are the errors:
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: [email protected]
npm ERR! Found: [email protected]
npm ERR! node_modules/react
npm ERR! react@"18.1.0" from the root project
npm ERR! peer react@"*" from @jsamr/[email protected]
npm ERR! node_modules/@jsamr/react-native-li
npm ERR! @jsamr/react-native-li@"^2.3.0" from [email protected]
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 [email protected]
npm ERR! node_modules/react-query
npm ERR! react-query@"^3.34.2" from the root project
npm ERR!
npm ERR! Conflicting peer dependency: [email protected]
npm ERR! node_modules/react
npm ERR! peer react@"^16.8.0 || ^17.0.0" from [email protected]
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.
CodePudding user response:
Try to add this to your package.json and npm install again with --legacy-peer-deps option:
"dependencies": {
"hermes-engine": "^0.11.0",
},
CodePudding user response:
I'm also upgrading RN version to 0.70.1, from 0.69.x you have some changes to do in app/build.gradle
about hermes.
...
if (enableHermes) {
implementation("com.facebook.react:hermes-engine: ") {
exclude group: 'com.facebook.fbjni'
}
} else {
implementation jscFlavor
}
...
Source: Bundled Hermes Documentation
CodePudding user response:
I am also interested about this issue, the same thing is happening for me, I already checked the Upgrade Helper, and I am upgrading from 0.68.5 to 0.70.1.
I still haven't turned on the NEW_ARCHITECTURE flag.
Installing hermes-engine package seems like not a good solution, since the upgrade steps doesn't mention that it should be done.