从Glide 3.8迁移到4.5后applyOptions方法不再执行怎么办?
哦,这个坑我踩过!Glide 4.x对模块配置系统做了彻底的重构,原来的GlideModule接口已经被废弃,不再被Glide自动识别,这就是你的applyOptions方法没触发的核心原因。
核心解决方案:改用AppGlideModule+注解驱动
Glide 4.x使用注解处理器来发现应用的配置模块,你需要做以下几步修改:
替换父类并添加必要注解
把你的ImageGlideModule继承自AppGlideModule(而不是旧的GlideModule),并且必须添加@GlideModule注解——这个注解是Glide识别配置类的关键。调整方法实现
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

