You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Glide 4.12.0加载URL获取Drawable时报NoClassDefFoundError如何解决

问题根因

你的报错本质不是Glide加载图片资源失败,而是Android运行时无法找到你代码中匿名内部类的字节码,属于项目构建层面的问题,和Glide的图片加载逻辑本身没有直接关联。

解决方案

1. 清理构建缓存重建项目

优先尝试清理构建缓存解决类加载异常:

  • 在Android Studio中点击 File -> Invalidate Caches,勾选 Clear file system cache and local history 后重启IDE,再重新编译项目
  • 也可以通过命令行执行 ./gradlew clean assembleDebug 完成清理编译

2. 补全Glide混淆规则

如果你的项目开启了代码混淆、资源缩减功能,需要在proguard-rules.pro中添加Glide的专属混淆规则,避免相关类被误删:

-keep public class * implements com.bumptech.glide.module.GlideModule
-keep class * extends com.bumptech.glide.module.AppGlideModule {
 <init>(...);
}
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}

3. 检查MultiDex配置

如果你的项目minSdk版本低于21且开启了MultiDex分包,需要确保配置正确:

  • 先确认依赖已添加:implementation 'androidx.multidex:multidex:2.0.1'
  • 在自定义Application类的attachBaseContext方法中调用MultiDex.install(this)完成初始化

4. 优化Glide加载代码

解决构建层面问题后,可以调整Glide加载逻辑避免加载异常,CustomTarget需要明确指定加载尺寸,否则可能因为无法测量大小加载失败:

comment.imageURL?.takeIf { loadImage }?.let { imageUrl ->
    Glide.with(context)
        .load(imageUrl)
        // 可以指定加载原图,也可以传入你需要的宽高数值比如override(400,400)
        .override(Target.SIZE_ORIGINAL)
        .into(object : CustomTarget<Drawable>() {
            override fun onLoadFailed(errorDrawable: Drawable?) {
                super.onLoadFailed(errorDrawable)
                // 你的错误处理逻辑
            }

            override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
                // 加载成功后的逻辑
            }

            override fun onLoadCleared(placeholder: Drawable?) {
                // 资源被清理时的逻辑
            }
        })
}

额外确认:AndroidManifest.xml中已经添加网络权限:<uses-permission android:name="android.permission.INTERNET" />,这是加载网络图片的必要条件。

内容的提问来源于stack exchange,提问作者Rondev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:27:03