App crashes when ProGuard is enabled
I enabled ProGuard in my app and it crashes on start.
This is the crash report:
05-29 16:58:20.913 6738 6810 E AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
05-29 16:58:20.913 6738 6810 E AndroidRuntime: Process: XXX.XXX.XXX, PID: 6738
05-29 16:58:20.913 6738 6810 E AndroidRuntime: java.lang.IllegalArgumentException: writeKey must not be null or empty.
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at com.segment.analytics.Analytics$Builder.<init>(Analytics.java:1095)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at com.leo_pharma.analytics.SegmentModule.setup(SegmentModule.java:52)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:158)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:873)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at android.os.Looper.loop(Looper.java:193)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:232)
05-29 16:58:20.913 6738 6810 E AndroidRuntime: at java.lang.Thread.run(Thread.java:764)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
05-29 17:06:13.689 8046 8132 E AndroidRuntime: Process: XXX.XXX.XXX, PID: 8046
05-29 17:06:13.689 8046 8132 E AndroidRuntime: java.lang.IllegalArgumentException: writeKey must not be null or empty.
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at com.segment.analytics.Analytics$Builder.<init>(Analytics.java:1095)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at com.leo_pharma.analytics.SegmentModule.setup(SegmentModule.java:52)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:158)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:873)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at android.os.Looper.loop(Looper.java:193)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:232)
05-29 17:06:13.689 8046 8132 E AndroidRuntime: at java.lang.Thread.run(Thread.java:764)
I added some rules to keep the involved classes and avoid ProGuard from obfuscating them, but that did'nt do the trick:
-keep class com.leo_pharma.analytics.** {*;}
-keep class com.segment.analytics.** {*;}
-keep class com.amplitude.** { *; }
Any help is welcome! :)
Did you find a solution?
Did you find a solution?
Nope, sorry… We moved to the official Segment library anyway.
If possible, I'd recommend to migrate to the official Segment RN library: https://github.com/segmentio/analytics-react-native. The setup is very similar and it comes with official support from Segment. This one has been deprecated since Segment came out with their own, and we will not be doing any fixes here.