react-native-community / jsc-android-buildscripts

Script for building JavaScriptCore for Android (for React Native but not only)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Android build starts failing after updating to RN 0.58

mars-lan opened this issue · comments

Issue Description

Followed the instructions at https://github.com/react-native-community/jsc-android-buildscripts#how-to-use-it-with-my-react-native-app and was able to get it to build for RN 0.57. After updating to RN 0.58, react-native run-android starts failing with the following error

> Task :app:transformNativeLibsWithMergeJniLibsForDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'.
> More than one file was found with OS independent path 'lib/x86_64/libjsc.so'

Version, config, any additional info

236355.1.1

The solution is in README.md.

In android/app/build.gradle add the following under android:

android {
    ...
+   packagingOptions {
+       pickFirst '**/libjsc.so'
+   }
}

@experiment322 thanks for pointing that out. This fixed the build issue.

Had the same issue in a clean project using react-native 0.58.3 and jsc 236355.1.1, the README suggest to add:

packagingOptions { pickFirst '**/libgnustl_shared.so' }

This didn't work for me, but the solution provided by @experiment322 did.

@rvolution are you sure your app is actually using jsc 236355? I suspect it's not, and you just didn't notice. Do native Proxy objects work?

@jshearer I don't use proxies directly in my app but i'm using MobX 5 and it's working fine.

This is the error that i got when attempting to compile:
More than one file was found with OS independent path 'lib/x86_64/libjsc.so'

It was resolved by adding:

packagingOptions {
    pickFirst '**/libjsc.so'
}

It seems that at some moment this was on the readme, but currently it provides a solution for a similar conflict with a different file armeabi-v7a/libgnustl_shared.so

This should be added to the readme to save others gradle noobs like me of the struggle :)

I have tried everything above mentioned, but it's still not working for me.
react-native: 0.58.3
jsc-android: 236355.1.1
and MobX 5

any updates on this? Thanks.

commented

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

packagingOptions {
pickFirst 'lib/x86/libc++_shared.so'
pickFirst 'lib/x86_64/libjsc.so'
pickFirst 'lib/arm64-v8a/libjsc.so'
pickFirst 'lib/arm64-v8a/libc++_shared.so'
pickFirst 'lib/x86_64/libc++_shared.so'
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
}

This worked for me, thx @nonotest :D

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

Worked for me, thanks !!!

Hi the packagingOptions solution works when assembling debug builds with:

./gradlew assembleDebug

However it doesn't seem to work when assembling a test build with:

./gradlew assembleAndroidTest

Anybody here knows the subtleties between assembling a debug build and assembling a test build in gradle? Is there a workaround for this?

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

This worked for me Thx!!!

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

This worked for me. Thank you so much.

packagingOptions {
pickFirst 'lib/x86/libc++_shared.so'
pickFirst 'lib/x86_64/libjsc.so'
pickFirst 'lib/arm64-v8a/libjsc.so'
pickFirst 'lib/arm64-v8a/libc++_shared.so'
pickFirst 'lib/x86_64/libc++_shared.so'
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
}

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

It's worked for me

This issue is closed but wanted to share what I discovered that you can also use pickFirsts = [...] instead of multiple pickFirst.

Hi the packagingOptions solution works when assembling debug builds with:

./gradlew assembleDebug

However it doesn't seem to work when assembling a test build with:

./gradlew assembleAndroidTest

Anybody here knows the subtleties between assembling a debug build and assembling a test build in gradle? Is there a workaround for this?

@sxqnicholas96 Did you find anything to fix assembleAndroidTest using this method?

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

This helped me too RN 0.60.5

commented

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

great!!! thanks a lot. it helped me. RN 0.60.5

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

It's worked for me. RN 0.61.2 .

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

It's worked for me. RN 0.61.2 .

add this to app/build.gradle
packagingOptions {
pickFirst 'lib/x86/libswscale.so'
pickFirst 'lib/x86/libavcodec.so'
pickFirst 'lib/x86/libavformat.so'
pickFirst 'lib/x86/libavutil.so'
pickFirst 'lib/x86_64/libavutil.so'
pickFirst 'lib/x86_64/libavcodec.so'
pickFirst 'lib/x86_64/libswscale.so'
pickFirst 'lib/x86_64/libavformat.so'
pickFirst 'lib/arm64-v8a/libavcodec.so'
pickFirst 'lib/arm64-v8a/libavformat.so'
pickFirst 'lib/arm64-v8a/libavutil.so'
pickFirst 'lib/arm64-v8a/libswscale.so'
pickFirst 'lib/armeabi-v7a/libavutil.so'
pickFirst 'lib/armeabi-v7a/libavformat.so'
pickFirst 'lib/armeabi-v7a/libavcodec.so'
pickFirst 'lib/armeabi-v7a/libswscale.so'

}

add this to app/build.gradle
packagingOptions {
pickFirst 'lib/x86/libswscale.so'
pickFirst 'lib/x86/libavcodec.so'
pickFirst 'lib/x86/libavformat.so'
pickFirst 'lib/x86/libavutil.so'
pickFirst 'lib/x86_64/libavutil.so'
pickFirst 'lib/x86_64/libavcodec.so'
pickFirst 'lib/x86_64/libswscale.so'
pickFirst 'lib/x86_64/libavformat.so'
pickFirst 'lib/arm64-v8a/libavcodec.so'
pickFirst 'lib/arm64-v8a/libavformat.so'
pickFirst 'lib/arm64-v8a/libavutil.so'
pickFirst 'lib/arm64-v8a/libswscale.so'
pickFirst 'lib/armeabi-v7a/libavutil.so'
pickFirst 'lib/armeabi-v7a/libavformat.so'
pickFirst 'lib/armeabi-v7a/libavcodec.so'
pickFirst 'lib/armeabi-v7a/libswscale.so'

}

work for me, thanks a lot

add this to app/build.gradle
packagingOptions {
pickFirst 'lib/x86/libswscale.so'
pickFirst 'lib/x86/libavcodec.so'
pickFirst 'lib/x86/libavformat.so'
pickFirst 'lib/x86/libavutil.so'
pickFirst 'lib/x86_64/libavutil.so'
pickFirst 'lib/x86_64/libavcodec.so'
pickFirst 'lib/x86_64/libswscale.so'
pickFirst 'lib/x86_64/libavformat.so'
pickFirst 'lib/arm64-v8a/libavcodec.so'
pickFirst 'lib/arm64-v8a/libavformat.so'
pickFirst 'lib/arm64-v8a/libavutil.so'
pickFirst 'lib/arm64-v8a/libswscale.so'
pickFirst 'lib/armeabi-v7a/libavutil.so'
pickFirst 'lib/armeabi-v7a/libavformat.so'
pickFirst 'lib/armeabi-v7a/libavcodec.so'
pickFirst 'lib/armeabi-v7a/libswscale.so'

}

worked for me..... Thanks a lot

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

I was stuck , Thanks for your help
This method really worked

It worked for me like this:

adb devices

then I run npx react-native run-android

commented

I had to use:

packagingOptions {
       pickFirst 'lib/x86/libc++_shared.so'
       pickFirst 'lib/x86_64/libjsc.so'
       pickFirst 'lib/arm64-v8a/libjsc.so'
       pickFirst 'lib/arm64-v8a/libc++_shared.so'
       pickFirst 'lib/x86_64/libc++_shared.so'
       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
   }

if that helps

It's worked for me. RN 0.61.2 .