Skip to content

Incompatibility with OkHttp 5.x.y #98

Open
@mauriciospinardi-cloudwalk

Description

Describe the bug

  • Current stable Unleash release 1.2.1 seems incompatible with OkHttp 5.x.y.
  • OkHttp 5.x.y has not yet reached the stable release status (currently on alpha), but it's the only version that implements "fast fallback": https://square.github.io/okhttp/changelogs/changelog/#version-500-alpha4
  • Fast fallback is critical to improve support for mixed IPv4+IPv6 networks.
  • The issue itself seems to root on Unleash code using "internals" from OkHttp.
    • I'm pretty sure there may be a good reason for things to be as they are, however, packages named "internals" are usually named this way to indicate they shouldn't be used by third parties (meaning they are not part of the public API from OkHttp).
  • Unleash is very important over here, but so it is OkHttp 5.x.y.
    • Is there anything I can do to help?
    • Is there anything do you guys see me doing wrong?

HIghlights from the issue:

--------- beginning of crash
[...] D  Shutting down VM
[...] E  FATAL EXCEPTION: main
[...]    Process: io.cloudwalk.unleash, PID: 13626
[...]    java.lang.NoClassDefFoundError: Failed resolution of: Lokhttp3/internal/Util;
[...]    	at io.getunleash.android.DefaultUnleash.buildDataJobs(DefaultUnleash.kt:168)
[...]    	at io.getunleash.android.DefaultUnleash.<init>(DefaultUnleash.kt:105)
[...]    	at io.getunleash.android.DefaultUnleash.<init>(DefaultUnleash.kt:62)
[...]    	at io.cloudwalk.unleash.Application.onCreate(Application.kt:17)
[...]    	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1316)
[...]    	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6998)
[...]    	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
[...]    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2236)
[...]    	at android.os.Handler.dispatchMessage(Handler.java:106)
[...]    	at android.os.Looper.loopOnce(Looper.java:205)
[...]    	at android.os.Looper.loop(Looper.java:294)
[...]    	at android.app.ActivityThread.main(ActivityThread.java:8177)
[...]    	at java.lang.reflect.Method.invoke(Native Method)
[...]    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
[...]    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
[...]    Caused by: java.lang.ClassNotFoundException: Didn't find class "okhttp3.internal.Util" on path: DexPathList[[dex file "/data/data/io.cloudwalk.unleash/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~ivTzdpf-kVmTfFFRfjItzA==/io.cloudwalk.unleash-qHJ7oGUs1vKX9mLj56qyMA==/base.apk"],nativeLibraryDirectories=[/data/app/~~ivTzdpf-kVmTfFFRfjItzA==/io.cloudwalk.unleash-qHJ7oGUs1vKX9mLj56qyMA==/lib/arm64, /system/lib64, /system_ext/lib64]]
[...]    	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
[...]    	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
[...]    	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
[...]    	at io.getunleash.android.DefaultUnleash.buildDataJobs(DefaultUnleash.kt:168) 
[...]    	at io.getunleash.android.DefaultUnleash.<init>(DefaultUnleash.kt:105) 
[...]    	at io.getunleash.android.DefaultUnleash.<init>(DefaultUnleash.kt:62) 
[...]    	at io.cloudwalk.unleash.Application.onCreate(Application.kt:17) 
[...]    	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1316) 
[...]    	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6998) 
[...]    	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) 
[...]    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2236) 
[...]    	at android.os.Handler.dispatchMessage(Handler.java:106) 
[...]    	at android.os.Looper.loopOnce(Looper.java:205) 
[...]    	at android.os.Looper.loop(Looper.java:294) 
[...]    	at android.app.ActivityThread.main(ActivityThread.java:8177) 
[...]    	at java.lang.reflect.Method.invoke(Native Method) 
[...]    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) 
[...]    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) 
[...] I  Sending signal. PID: 13626 SIG: 9

Steps to reproduce the bug

  1. Create a sample application
  2. Add Unleash 1.2.1 as a dependency
  3. Add OkHttp 5.0.0-alpha.14 as a dependency
  4. Ensure Unleash initialization - e.g. in Application#onCreate()
  5. Application will crash due to failed resolution of: Lokhttp3/internal/Util;
  6. Replace OkHttp 5.0.0-alpha.14 by 4.12.0
  7. Application will run with no crashes whatsoever

Expected behavior

Unleash shouldn't crash the application during it's initialization when paired with OkHttp 5.x.y

Logs, error output, etc.

--------- beginning of crash
12-16 17:05:44.926 14712 14712 E AndroidRuntime: FATAL EXCEPTION: main
12-16 17:05:44.926 14712 14712 E AndroidRuntime: Process: io.cloudwalk.unleash, PID: 14712
12-16 17:05:44.926 14712 14712 E AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of: Lokhttp3/internal/Util;
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at io.getunleash.android.DefaultUnleash.buildDataJobs(DefaultUnleash.kt:168)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at io.getunleash.android.DefaultUnleash.<init>(DefaultUnleash.kt:105)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at io.getunleash.android.DefaultUnleash.<init>(DefaultUnleash.kt:62)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at io.cloudwalk.unleash.Application.onCreate(Application.kt:17)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1316)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6998)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2236)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at android.os.Looper.loopOnce(Looper.java:205)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:294)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:8177)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "okhttp3.internal.Util" on path: DexPathList[[dex file "/data/data/io.cloudwalk.unleash/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~ivTzdpf-kVmTfFFRfjItzA==/io.cloudwalk.unleash-qHJ7oGUs1vKX9mLj56qyMA==/base.apk"],nativeLibraryDirectories=[/data/app/~~ivTzdpf-kVmTfFFRfjItzA==/io.cloudwalk.unleash-qHJ7oGUs1vKX9mLj56qyMA==/lib/arm64, /system/lib64, /system_ext/lib64]]
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
12-16 17:05:44.926 14712 14712 E AndroidRuntime: 	... 15 more
12-16 17:05:44.930   552 14731 I DropBoxManagerService: add tag=data_app_crash isTagEnabled=true flags=0x2
12-16 17:05:44.930   552   747 W ActivityTaskManager:   Force finishing activity io.cloudwalk.unleash/.MainActivity
12-16 17:05:44.936  1332  1369 V WindowManagerShell: Transition requested: android.os.BinderProxy@532586b TransitionRequestInfo { type = CLOSE, triggerTask = null, remoteTransition = null, displayChange = null }
12-16 17:05:44.936 14712 14712 I Process : Sending signal. PID: 14712 SIG: 9
12-16 17:05:44.943   552   747 I ActivityManager: Process io.cloudwalk.unleash (pid 14712) has died: fg  TOP 
12-16 17:05:44.943   552   582 I libprocessgroup: Successfully killed process cgroup uid 10191 pid 14712 in 0ms
12-16 17:05:44.944   350   350 I Zygote  : Process 14712 exited due to signal 9 (Killed)

Screenshots

No response

Additional context

No response

Unleash version

1.2.1

Subscription type

None

Hosting type

None

SDK information (language and version)

No response

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

For later

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions