panpf / sketch

Sketch is an image loading library designed for Compose Multiplatform and Android View. It is powerful and rich in functions. In addition to basic functions, it also supports GIF, SVG, video thumbnails, Exif Orientation, etc.
Apache License 2.0
2.05k stars 309 forks source link

Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.appcompat.graphics.drawable.DrawableWrapper" #168

Closed MiChongs closed 2 years ago

MiChongs commented 2 years ago

main - RequestExecutor. Request failed. java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/graphics/drawable/DrawableWrapper;. http://img5.adesk.com/6306e315e7bce7031747f13c?imageMogr2/thumbnail/!1080x1920r/gravity/Center/crop/1080x1920&sign=bac7532c58bdd625b0ffad6ca8bdb3ad&t=632428cd&_resize=Resize(300x2260,Fixed(LESS_PIXELS),Fixed(FILL)) com.github.panpf.sketch.util.UnknownException: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/graphics/drawable/DrawableWrapper; at com.github.panpf.sketch.request.internal.RequestExecutor.execute(RequestExecutor.kt:153) at com.github.panpf.sketch.request.internal.RequestExecutor$execute$1.invokeSuspend(Unknown Source:16) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:211) at android.os.Looper.loop(Looper.java:300) at android.app.ActivityThread.main(ActivityThread.java:8291) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1074) Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/graphics/drawable/DrawableWrapper; at com.github.panpf.sketch.drawable.internal.ResizeDrawableKt.tryToResizeDrawable(Unknown Source:0) at com.github.panpf.sketch.request.internal.RequestExecutor.execute(RequestExecutor.kt:122) at com.github.panpf.sketch.request.internal.RequestExecutor$execute$1.invokeSuspend(Unknown Source:16)  at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)  at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)  at android.os.Handler.handleCallback(Handler.java:938)  at android.os.Handler.dispatchMessage(Handler.java:99)  at android.os.Looper.loopOnce(Looper.java:211)  at android.os.Looper.loop(Looper.java:300)  at android.app.ActivityThread.main(ActivityThread.java:8291)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1074)  Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.appcompat.graphics.drawable.DrawableWrapper" on path: DexPathList[[dex file "/data/data/com.manchuan.tools/code_cache/.overlay/base.apk/classes11.dex", dex file "/data/data/com.manchuan.tools/code_cache/.overlay/base.apk/classes12.dex", dex file "/data/data/com.manchuan.tools/code_cache/.overlay/base.apk/classes14.dex", dex file "/data/data/com.manchuan.tools/code_cache/.overlay/base.apk/classes16.dex", dex file "/data/data/com.manchuan.tools/code_cache/.overlay/base.apk/classes21.dex", dex file "/data/data/com.manchuan.tools/code_cache/.overlay/base.apk/classes24.dex", dex file "/data/data/com.manchuan.tools/code_cache/.overlay/base.apk/classes26.dex", zip file "/data/app/MiulH3ihLMLP3THPCgpbjg==/com.manchuan.tools-J7umuNTfwDPD536OwTeBpA==/base.apk"],nativeLibraryDirectories=[/data/app/MiulH3ihLMLP3THPCgpbjg==/com.manchuan.tools-J7umuNTfwDPD536OwTeBpA==/lib/arm64, /data/app/~~MiulH3ihLMLP3THPCgpbjg==/com.manchuan.tools-J7umuNTfwDPD536OwTeBpA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.github.panpf.sketch.drawable.internal.ResizeDrawableKt.tryToResizeDrawable(Unknown Source:0)  at com.github.panpf.sketch.request.internal.RequestExecutor.execute(RequestExecutor.kt:122)  at com.github.panpf.sketch.request.internal.RequestExecutor$execute$1.invokeSuspend(Unknown Source:16)  at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)  at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)  at android.os.Handler.handleCallback(Handler.java:938)  at android.os.Handler.dispatchMessage(Handler.java:99)  at android.os.Looper.loopOnce(Looper.java:211)  at android.os.Looper.loop(Looper.java:300)  at android.app.ActivityThread.main(ActivityThread.java:8291)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1074) 

MiChongs commented 2 years ago

使用的版本是3.0.0

MiChongs commented 2 years ago

使用resizeApplyToDrawable()就会出现此问题

panpf commented 2 years ago

首先 resizeApplyToDrawable() 功能用到了 DrawableWrapper,而 DrawableWrapper 包含在 appcompat-resources 库中

sketch 的 pom 文件( https://repo1.maven.org/maven2/io/github/panpf/sketch3/sketch/3.0.0/sketch-3.0.0.pom )中已经正确声明了对 appcompat-resources 库的依赖

那么有以下几种情况需要你一一排查:

  1. 依赖是否下载成功
  2. 版本是否正确,sketch 的 pom 文件中声明的是 1.4.2 版本
  3. 运行时 appcompat-resources 包中类是否在 apk 中
  4. 如果涉及到了 dex 分包,那么是否在 Application 中成功加载了所有 dex 包
MiChongs commented 2 years ago

我包里的不是DrawableWrapper 而是DrawableWrapperCompat

panpf commented 2 years ago

那你看看怎么会没有 DrawableWrapper,必须要用的

MiChongs commented 2 years ago

那你看看怎么会没有 DrawableWrapper,必须要用的 可以了 原来是Rikkax搞的鬼