Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incompatibility with OkHttp 5.x.y #98

Open
mauriciospinardi-cloudwalk opened this issue Dec 16, 2024 · 3 comments
Open

Incompatibility with OkHttp 5.x.y #98

mauriciospinardi-cloudwalk opened this issue Dec 16, 2024 · 3 comments
Assignees
Labels
bug Something isn't working

Comments

@mauriciospinardi-cloudwalk

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

@mauriciospinardi-cloudwalk mauriciospinardi-cloudwalk added the bug Something isn't working label Dec 16, 2024
@ivarconr ivarconr moved this from New to Investigating in Issues and PRs Dec 17, 2024
@ivarconr
Copy link
Member

Hi @mauriciospinardi-cloudwalk,

thanks for reporting this. Our team have not yet been testing the Unleash SDK with the next version of OkHttp.

We will look into this. 👍🏼

@za4em
Copy link

za4em commented Dec 19, 2024

Hi!
Do you have any workaround for this?

@gastonfournier
Copy link
Contributor

Hi @za4em, no, we don't have a workaround and we won't spend time fixing issues with an alpha dependency. Once it moves to beta, maybe we can bring this discussion back again in preparation for its release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Status: Investigating
Development

No branches or pull requests

5 participants