Closed LadislavBohm closed 11 months ago
:warning: | Missing Environment Information |
---|---|
:information_source: | Your issue may be missing information about your development environment. You can obtain the missing information by running react-native info in a console. |
I did add environment info so I'm not sure what more this bot wants from me 🤔
I think I found the issue. It got broken because of this commit:
https://github.com/facebook/react-native/commit/91adb761cf1583598d4d63ce879fd7e0f4ae793c
so in order for this to work you need to name your build variants including a word "release". What I tried to do then is this:
rename build variant
stagingRelease {
initWith release
signingConfig signingConfigs.debug
applicationIdSuffix ".staging"
matchingFallbacks = ['release']
}
rename settings to align with the new name:
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
stagingReleaseImplementation files(hermesPath + "hermes-release.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
and
project.ext.react = [
enableHermes: true, // clean and rebuild if changing
bundleInStagingRelease: true, //include JS bundle in staging builds
devDisabledInStagingRelease: true //disable DEV mode in staging builds
]
But I still think this is breaking change and probably not the right way to do it. This requires us to change not only name of build variants but also all references to it like CI scripts.
Thank you so much for reporting this. We had the same issue and we probably never would have found the solution without this report. ❤️
But I still think this is breaking change and probably not the right way to do it. This requires us to change not only name of build variants but also all references to it like CI scripts.
You could specify hermesFlagsForVariant
and deleteDebugFilesForVariant
to customize variant configs.
That gives you full control over variant behavior + you don't need to rename it to stagingRelease
anymore.
Is this documented somewhere or can you please show an example how to configure staging with adding Release suffix to work in release builds? This is a breaking change from 0.66.x as it was working and we never had to specify those so IMO it's worth mentioning somewhere, thank you.
@LadislavBohm i tried your suggestion without success.
Could you please take a look below and help me? Im in a dead end.
def useIntlJsc = false
apply plugin: "com.android.application"
import com.android.build.OutputFile
apply from: "../../node_modules/react-native/react.gradle"
apply from: "../../node_modules/@sentry/react-native/sentry.gradle"
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
* and their defaults. If you decide to add a configuration block, make sure to add it before the
* `apply from: "../../node_modules/react-native/react.gradle"` line.
*
* project.ext.react = [
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
* // the entry file for bundle generation. If none specified and
* // "index.android.js" exists, it will be used. Otherwise "index.js" is
* // default. Can be overridden with ENTRY_FILE environment variable.
* entryFile: "index.android.js",
...
@joaotmachado It's a bit hard to read your gradle file, but I don't see anything wrong when I look at it. Are you getting the same error message as me?
Probably post error message too and try to post build.gradle without all those comments so it's easier to read.
@LadislavBohm i edited my builld.gradle below. And here goes my error:
2022-02-26 11:06:28.641 1657-1657/com.app.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app.app, PID: 1657
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libjscexecutor.so caused by: dlopen failed: library "libjsc.so" not found: needed by /data/app/~~R3RmzM0PSs5cjsK8SfkpXQ==/com.app.app-NG27bssWS3HWJTIklRgEoQ==/lib/arm64/libjscexecutor.so in namespace classloader-namespace result: 0
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:1098)
at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:914)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:826)
...
I don't think your problem is related to the same issue I had. The error doesn't even look like you are building staging build type.
Are you building it with "./gradlew.bat assembleStagingRelease"? Seems like you built standard assembleRelease version and that crashed with slightly different error. Not sure I can help here.
I don't think your problem is related to the same issue I had. The error doesn't even look like you are building staging build type.
Are you building it with "./gradlew.bat assembleStagingRelease"? Seems like you built standard assembleRelease version and that crashed with slightly different error. Not sure I can help here.
@LadislavBohm The error occurs on Debug Mode when executing react-native run-android.
I get a similar problem when reloading using flipper, the app will crash
But I still think this is breaking change and probably not the right way to do it. This requires us to change not only name of build variants but also all references to it like CI scripts.
You could specify
hermesFlagsForVariant
anddeleteDebugFilesForVariant
to customize variant configs.That gives you full control over variant behavior + you don't need to rename it to
stagingRelease
anymore.
Thanks ! Got it resolved by adding these lines in android/app/build.gradle
(my variant name's beta
) :
project.ext.react = [
bundleInBeta: true,
devDisabledInBeta: true,
hermesFlagsForVariant: {
def v -> v.name.toLowerCase().contains('release') || v.name.toLowerCase().contains('beta') ? ['-w'] : []
},
deleteDebugFilesForVariant: {
def v -> v.name.toLowerCase().contains('release') || v.name.toLowerCase().contains('beta')
},
]
as mentioned in https://github.com/facebook/react-native/pull/32281
This is saver! I wish we can at least have some comments in that build type section so indicate the naming convention
What exactly should we do to get rid of this error in this release build? Can someone give an example build.gradle?
It happens with 0.67.4v as well. I think the issue here is that react-native 0.67.4v uses hermes-engine 0.9 instead it should use 0.10. But I'm not sure though.
This worked for me. Thanks
Closing as this and other variant-related build issues have been fixed in React Native 0.71
Description
When you create new RN project running on 0.67.3 and add a custom build type that inherits from release and launch the app it crashes. Does not crash in debug and does not crash when launching the app in release build type (pre-defined).
Version
0.67.3
Output of
npx react-native info
Steps to reproduce
and enable hermes:
Snack, code example, screenshot, or link to a repository
Crash in Android Studio: