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

从Glide 3.8迁移到4.5后applyOptions方法不再执行怎么办?

解决Glide 4.5中GlideModule的applyOptions方法不执行的问题

哦,这个坑我踩过!Glide 4.x对模块配置系统做了彻底的重构,原来的GlideModule接口已经被废弃,不再被Glide自动识别,这就是你的applyOptions方法没触发的核心原因。

核心解决方案:改用AppGlideModule+注解驱动

Glide 4.x使用注解处理器来发现应用的配置模块,你需要做以下几步修改:

  1. 替换父类并添加必要注解
    把你的ImageGlideModule继承自AppGlideModule(而不是旧的GlideModule),并且必须添加@GlideModule注解——这个注解是Glide识别配置类的关键。

  2. 调整方法实现
    AppGlideModule提供了和旧GlideModule几乎一致的方法签名,你只需要把原有逻辑迁移过去即可。另外推荐禁用Manifest解析,避免旧的配置模块干扰,同时加快初始化速度。

修改后的完整代码如下:

import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.module.AppGlideModule
import com.bumptech.glide.Glide
import com.bumptech.glide.GlideBuilder
import com.bumptech.glide.load.DecodeFormat
import android.content.Context

@GlideModule
class ImageGlideModule : AppGlideModule() {
    override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
        // 保留你的组件注册逻辑(如果有的话)
        super.registerComponents(context, glide, registry)
    }

    override fun applyOptions(context: Context, builder: GlideBuilder) {
        val detector = MainApplication.component.getPerformacneDetect()
        if (detector.isHighPerformingDevice) {
            builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888)
        } else {
            builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565)
        }
    }

    // 可选但推荐:禁用Manifest解析,避免加载旧的GlideModule配置
    override fun isManifestParsingEnabled(): Boolean {
        return false
    }
}

关键依赖检查

确保你的项目中添加了Glide的注解处理器依赖(版本要和Glide 4.5.0匹配):
对于Kotlin项目,在build.gradle(Module级)中添加:

dependencies {
    implementation 'com.github.bumptech.glide:glide:4.5.0'
    kapt 'com.github.bumptech.glide:compiler:4.5.0'
}

最后一步:清理重构项目

执行一次Clean Project + Rebuild Project,让注解处理器生成Glide的配置类(比如自动生成的GlideApp)。之后你可以通过GlideApp.with(context)来使用Glide(当然继续用Glide.with也能生效,但GlideApp是4.x推荐的方式)。

原理补充

Glide 3.x是通过Manifest中的<meta-data>标签来发现GlideModule的,而4.x改用注解处理器机制,只有带有@GlideModule注解的AppGlideModule/LibraryGlideModule子类才会被Glide加载,旧的GlideModule接口已经被标记为废弃,完全不会被处理,所以你的applyOptions自然不会执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:31:07