Detox: App crashes on launch with detox
Describe the bug Followed the instructions to setup detox. On running the tests, app crashes on launch. adb logcat shows this error:
FATAL EXCEPTION: com.wix.detox.manager
Process: com.app, PID: 8836
java.lang.ExceptionInInitializerError
at com.wix.detox.reactnative.ReactNativeExtension.waitForRNBootstrap(ReactNativeExtension.kt:53)
at com.wix.detox.DetoxManager.initReactNativeIfNeeded(DetoxManager.java:138)
at com.wix.detox.DetoxManager.access$000(DetoxManager.java:26)
at com.wix.detox.DetoxManager$2.run(DetoxManager.java:80)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at com.wix.detox.Detox$1.run(Detox.java:135)
at java.lang.Thread.run(Thread.java:919)
Caused by: org.joor.ReflectException: org.joor.ReflectException: java.lang.NoSuchFieldException: VERSION
at org.joor.Reflect.field(Reflect.java:286)
at com.wix.detox.reactnative.ReactNativeInfo.<clinit>(ReactNativeInfo.kt:12)
at com.wix.detox.reactnative.ReactNativeExtension.waitForRNBootstrap(ReactNativeExtension.kt:53)
at com.wix.detox.DetoxManager.initReactNativeIfNeeded(DetoxManager.java:138)
at com.wix.detox.DetoxManager.access$000(DetoxManager.java:26)
at com.wix.detox.DetoxManager$2.run(DetoxManager.java:80)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at com.wix.detox.Detox$1.run(Detox.java:135)
at java.lang.Thread.run(Thread.java:919)
Caused by: org.joor.ReflectException: java.lang.NoSuchFieldException: VERSION
at org.joor.Reflect.field0(Reflect.java:310)
at org.joor.Reflect.field(Reflect.java:282)
at com.wix.detox.reactnative.ReactNativeInfo.<clinit>(ReactNativeInfo.kt:12)
at com.wix.detox.reactnative.ReactNativeExtension.waitForRNBootstrap(ReactNativeExtension.kt:53)
at com.wix.detox.DetoxManager.initReactNativeIfNeeded(DetoxManager.java:138)
at com.wix.detox.DetoxManager.access$000(DetoxManager.java:26)
at com.wix.detox.DetoxManager$2.run(DetoxManager.java:80)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at com.wix.detox.Detox$1.run(Detox.java:135)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.NoSuchFieldException: VERSION
at java.lang.Class.getField(Class.java:1604)
at org.joor.Reflect.field0(Reflect.java:295)
at org.joor.Reflect.field(Reflect.java:282)
at com.wix.detox.reactnative.ReactNativeInfo.<clinit>(ReactNativeInfo.kt:12)
at com.wix.detox.reactnative.ReactNativeExtension.waitForRNBootstrap(ReactNativeExtension.kt:53)
at com.wix.detox.DetoxManager.initReactNativeIfNeeded(DetoxManager.java:138)
at com.wix.detox.DetoxManager.access$000(DetoxManager.java:26)
at com.wix.detox.DetoxManager$2.run(DetoxManager.java:80)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at com.wix.detox.Detox$1.run(Detox.java:135)
at java.lang.Thread.run(Thread.java:919)
The first idea I get is that probably proguard is renaming the field as obfuscation is on?
This is where the error seems to be coming from:
val versionClass = Class.forName("com.facebook.react.modules.systeminfo.ReactNativeVersion")
val versionMap: Map<String, Int> = Reflect.on(versionClass).field("VERSION").get()
To Reproduce
- I have tested this issue on the latest Detox release and it still reproduces
Steps to reproduce:
- Setup proguard on the release app.
- Setup detox
- Run tests
Expected behavior App should not crash.
Issue got fixed by adding:
-keep class com.facebook.react.modules.systeminfo.ReactNativeVersion {*;}
to proguard rules.
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 18 (1 by maintainers)
@d4vidi I’ll put something together over the week, and comment here, and also share my findings. Thanks!