react-native-vision-camera icon indicating copy to clipboard operation
react-native-vision-camera copied to clipboard

Not building with RN 0.70, Reanimated 3 🐛

Open stryaponoff opened this issue 1 year ago • 14 comments

What were you trying to do?

Trying to build the app using release candidates of RN 0.70 and Reanimated 3

Reproduceable Code

No response

What happened instead?

Build failed because there are no aar now: both RN and Reanimated are building from source from 0.70

Relevant log output

FAILURE: Build completed with 2 failures.

1: Task failed with an exception.
-----------
* Where:
Build file '%APP_ROOT%/node_modules/react-native-vision-camera/android/build.gradle' line: 588

* What went wrong:
Execution failed for task ':react-native-vision-camera:extractJNIFiles'.
> Cannot expand ZIP '%APP_ROOT%/node_modules/react-native-reanimated/android/react-native-reanimated-70-hermes.aar' as it does not exist.

Device

Pixel 3

VisionCamera Version

2.14.1

Additional information

stryaponoff avatar Aug 24 '22 15:08 stryaponoff

Also getting the same issue with:

"react-native": "0.69.3",
"react-native-reanimated": "^3.0.0-rc.0",

Looks like react-native-vision-camera is not compatible with react-native-reanimated v3 yet.

SMJ93 avatar Aug 28 '22 18:08 SMJ93

Getting the same issue with:

"react-native": "0.70.0-rc.3",
"react-native-reanimated": "^3.0.0-rc.2",

JavidHaji-zada avatar Sep 01 '22 08:09 JavidHaji-zada

i'm having issues with "react-native": "0.69.0", "react-native-reanimated": "^3.0.0-rc.0"

GuilleAntico avatar Sep 07 '22 15:09 GuilleAntico

I'm having issue with

  "react-native": "0.70.0", 
  "react-native-reanimated": "^3.0.0-rc.2",
  "react-native-vision-camera": "^2.14.1",

too. Hope this fix soon, thank you

hoanjizi avatar Sep 08 '22 09:09 hoanjizi

When I upgrade RN to 0.70 from 0.69.3 the build is going to gave an error. I think the library doesn't support RN 0.70 pls fix soon

criss02-cs avatar Sep 08 '22 10:09 criss02-cs

We are having the same issues, we currently have this versions:

"react-native": "0.69.0", 
"react-native-reanimated": "^3.0.0-rc.0"

Hope this get fixed soon!

dmgallardo avatar Sep 08 '22 17:09 dmgallardo

Same case here, having issues with "react-native": "0.69.0", "react-native-reanimated": "^3.0.0-rc.0"

brizoalejandro avatar Sep 08 '22 17:09 brizoalejandro

Recently moved to 0.70. Facing the same issue as mentioned above. @mrousavy Please let us know if you have plan to fix this soon ?🤔

Kailash23 avatar Sep 13 '22 06:09 Kailash23

+1 Having the same.

react-native": "0.70.0 react-native-reanimated": "^3.0.0-rc.2 react-native-vision-camera": "^2.14.1

spaceod avatar Sep 13 '22 06:09 spaceod

issue with cmake :(

react-native: "0.70.0" react-native-reanimated: "^2.10.0"

coycoylaniba avatar Sep 15 '22 00:09 coycoylaniba

I'm having issue with

  "react-native": "0.70.0", 
  "react-native-reanimated": "^3.0.0-rc.2",
  "react-native-vision-camera": "^2.14.1",

hminhman avatar Sep 15 '22 01:09 hminhman

cmake的问题:(

react-native: "0.70.0" react-native-reanimated: "^2.10.0"

+1

zfy171 avatar Sep 15 '22 07:09 zfy171

Also having issues with

"react-native-vision-camera": "^2.14.1",
"react-native-reanimated": "2.5.0",
"react-native": "0.70.0",

jextrevor avatar Sep 15 '22 19:09 jextrevor

Hey girls and guys, I think we can stop posting our versions, the maintainers probably get the gist. The RN 0.70.0 compatible react-native-reanimated versions are not compatible with current react-native-vision-camera. It would be more helpful and productive to debug the build and look for a solution.

erksch avatar Sep 16 '22 07:09 erksch

Any update on this?

swushi avatar Sep 23 '22 15:09 swushi

Hey guys, for those who are struggling with using this with RN 0.70.0, I managed to make it work (dev and prod) with the following package.json (as a fix is in main but not published as version) :

"react": "18.1.0",
"react-native": "0.70.0",
"react-native-reanimated": "2.10.0",
"react-native-vision-camera": "github:mrousavy/react-native-vision-camera#b7bb8e4",

Of course, don't forget to clean your gradle build, launch with android and start a clean metro:

cd android && ./gradlew clean && cd ..
npx react-native run-android
npx react-native start -- --reset-cache

NastuzziSamy avatar Sep 30 '22 09:09 NastuzziSamy

I don't think this is the problem described in the issue. @erksch did not summarize precisely, because 2.10.0 is actually compatible with rn 0.70.0. You can easily use rn 0.70.0 together with current (not pre-releases) published versions of both libraries. In some cases you might have the the following issue https://github.com/mrousavy/react-native-vision-camera/issues/1118 which was fixed in the main branch of this repo.

Problem is when you want to try out the newArch (see here how to try it yourself) because then you need to use reanimated 3 which does not include the react-native-reanimated-70-hermes.aar as can see in the issue description above, which means your project won't compile. The cmake file in this project needs to be updated to handle this.

DomiR avatar Sep 30 '22 09:09 DomiR

I ran into this issue as well. Any news on this? There is also issue #1260 which sounds familiar to this one.

timoschlueter avatar Oct 03 '22 14:10 timoschlueter

@DomiR could rolling back some of these commits https://github.com/mrousavy/react-native-vision-camera/pull/1186/commits provide a solution for us?

vbylen avatar Oct 04 '22 21:10 vbylen

I don't think this is the problem described in the issue. @erksch did not summarize precisely, because 2.10.0 is actually compatible with rn 0.70.0. You can easily use rn 0.70.0 together with current (not pre-releases) published versions of both libraries. In some cases you might have the the following issue #1118 which was fixed in the main branch of this repo.

Problem is when you want to try out the newArch (see here how to try it yourself) because then you need to use reanimated 3 which does not include the react-native-reanimated-70-hermes.aar as can see in the issue description above, which means your project won't compile. The cmake file in this project needs to be updated to handle this.

it actually looks good to me, i only upgraded react-native-reanimated to the release candidate because of this: image and so i upgraded it to resolve this vulnerability, but i don't think it will be a problem for now, so @NastuzziSamy 's sollution works perfectly, thx btw

valn1 avatar Oct 11 '22 14:10 valn1

@vbylen Hey, no! That commit consumes hermes from source (instead of prebuilt). Now reanimated also does not distribute prebuilt anymore so we basically need to do the same - consume reanimated from source (instead of prebuilt).

As I'm no gradle ninja and only try to make it work I don't know the most elegant solution. I wanted to test fabric but I'm blocked by other libs but I can show you how to make vision camera consume the new reanimated temporarily (hermes + newarch).

Let me explain: The old reanimated distributed prebuilt files: image

These are then extracted by vision camera here: https://github.com/mrousavy/react-native-vision-camera/blob/cc7d195cbd191c436b24ee2cab7a1daf9dd23b31/android/build.gradle#L583-L595

Which is beeing configured here: https://github.com/mrousavy/react-native-vision-camera/blob/cc7d195cbd191c436b24ee2cab7a1daf9dd23b31/android/build.gradle#L282-L283

Afterwards the vision camera node_modules folder looks like this and you can see that in the build folder of android there is the extracted aar containing the .so files: Bildschirmfoto 2022-10-14 um 09 08 17

We therefore first need to disable this extraction. Just patch the line L283 and remove reanimated: extractJNI(files(rnAAR, jscAAR))

The solution to this issue would be to either create a gradle task to copy over the generated .so files or somehow link them directly. As I said I don't know the most elegant solution. In the meantime we can do this by hand. For that we run gradle build one time (using hermes + newArch flags) where it should show you the error in this issue but it will generate the .so files in reanimated folder in node_modules (see screenshot). We then just copy them over to where vision camera expects them (e.g. android/build/react-native-reanimated-67-hermes.aar/jni) Bildschirmfoto 2022-10-14 um 09 17 21

Second step is to update the CMakeList.txt in vision camera as the reanimated flattened the headers directory here: https://github.com/software-mansion/react-native-reanimated/commit/bb3e42154807bc9f220d49d3c2a03521f58c2394

So instead of https://github.com/mrousavy/react-native-vision-camera/blob/cc7d195cbd191c436b24ee2cab7a1daf9dd23b31/android/CMakeLists.txt#L63-L70

We need this:

# --- Reanimated ---
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/AnimatedSensor"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Tools"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/ReanimatedRuntime" # also new header
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SpecTools"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SharedItems"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Registries"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/LayoutAnimations"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/hidden_headers"

As I mentioned I could not verify as I'm running into issues with other libs. Harder part is now to support multiple versions of reanimated where you need to pick the correct tasks depending on the version of reanimated you have installed, sorry to be no help here 😢

DomiR avatar Oct 14 '22 07:10 DomiR

Hey guys, for those who are struggling with using this with RN 0.70.0, I managed to make it work (dev and prod) with the following package.json (as a fix is in main but not published as version) :

"react": "18.1.0",
"react-native": "0.70.0",
"react-native-reanimated": "2.10.0",
"react-native-vision-camera": "github:mrousavy/react-native-vision-camera#b7bb8e4",

Of course, don't forget to clean your gradle build, launch with android and start a clean metro:

cd android && ./gradlew clean && cd ..
npx react-native run-android
npx react-native start -- --reset-cache

@NastuzziSamy how to install this package? could you provide more information?thanks

kamo9527 avatar Oct 17 '22 08:10 kamo9527

Hi @kamo9527 , you just have to copy/paste the deps in your package.json (check that you have no duplications)

I would recommand to delete your package.lock and node_modules and then run npm install

And then run the following scripts described in my comment.

NastuzziSamy avatar Oct 17 '22 13:10 NastuzziSamy

comment @NastuzziSamy according to "react-native-vision-camera": "github:mrousavy/react-native-vision-camera#b7bb8e4", which version of react-native-vision-camera is correct? farther,I have try it you said ,but installing react-native-vision-camera failed

kamo9527 avatar Oct 18 '22 02:10 kamo9527

@kamo9527 - just add that line exactly as is show to package.json. This is a standard (albiet uncommon) way of referencing a commit-specific version of a package. npm will recognize and install that for you. To be clear:

  1. delete your node_modules folder
  2. Paste in those lines (or modify just the version numbers) in your package.json file
  3. issue npm install (or like in my case with rediculous react native deps, you may need npm install --legacy-peer-deps)
  4. violá, packages installed

However @NastuzziSamy , couldn't get it to work with those exact versions, still getting Execution failed for task ':react-native-vision-camera:compileDebugKotlin'.

princefishthrower avatar Oct 19 '22 07:10 princefishthrower

@vbylen Hey, no! That commit consumes hermes from source (instead of prebuilt). Now reanimated also does not distribute prebuilt anymore so we basically need to do the same - consume reanimated from source (instead of prebuilt).

As I'm no gradle ninja and only try to make it work I don't know the most elegant solution. I wanted to test fabric but I'm blocked by other libs but I can show you how to make vision camera consume the new reanimated temporarily (hermes + newarch).

Let me explain: The old reanimated distributed prebuilt files: image

These are then extracted by vision camera here:

https://github.com/mrousavy/react-native-vision-camera/blob/cc7d195cbd191c436b24ee2cab7a1daf9dd23b31/android/build.gradle#L583-L595

Which is beeing configured here:

https://github.com/mrousavy/react-native-vision-camera/blob/cc7d195cbd191c436b24ee2cab7a1daf9dd23b31/android/build.gradle#L282-L283

Afterwards the vision camera node_modules folder looks like this and you can see that in the build folder of android there is the extracted aar containing the .so files: Bildschirmfoto 2022-10-14 um 09 08 17

We therefore first need to disable this extraction. Just patch the line L283 and remove reanimated: extractJNI(files(rnAAR, jscAAR))

The solution to this issue would be to either create a gradle task to copy over the generated .so files or somehow link them directly. As I said I don't know the most elegant solution. In the meantime we can do this by hand. For that we run gradle build one time (using hermes + newArch flags) where it should show you the error in this issue but it will generate the .so files in reanimated folder in node_modules (see screenshot). We then just copy them over to where vision camera expects them (e.g. android/build/react-native-reanimated-67-hermes.aar/jni) Bildschirmfoto 2022-10-14 um 09 17 21

Second step is to update the CMakeList.txt in vision camera as the reanimated flattened the headers directory here: software-mansion/react-native-reanimated@bb3e421

So instead of

https://github.com/mrousavy/react-native-vision-camera/blob/cc7d195cbd191c436b24ee2cab7a1daf9dd23b31/android/CMakeLists.txt#L63-L70

We need this:

# --- Reanimated ---
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/AnimatedSensor"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Tools"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/ReanimatedRuntime" # also new header
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SpecTools"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/SharedItems"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/Registries"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/LayoutAnimations"
"${NODE_MODULES_DIR}/react-native-reanimated/Common/cpp/hidden_headers"

As I mentioned I could not verify as I'm running into issues with other libs. Harder part is now to support multiple versions of reanimated where you need to pick the correct tasks depending on the version of reanimated you have installed, sorry to be no help here 😢

@DomiR Did you manage to make your app work with Fabric, react-native-vision-camera and react-native-reanimated?

thiavila-sigma avatar Oct 19 '22 16:10 thiavila-sigma