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:

  1. Setup proguard on the release app.
  2. Setup detox
  3. 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)

Most upvoted comments

@d4vidi I’ll put something together over the week, and comment here, and also share my findings. Thanks!