升级到Glide 4.9.0时如何解决AbstractMethodError

时间:2019-02-21 19:53:07

标签: android-glide

这是库模块中附带的,因此它不应使用生成的API

升级到Glide 4.9.0

versions.glide = "4.9.0"

implementation "com.github.bumptech.glide:glide:$versions.glide"
kapt "com.github.bumptech.glide:compiler:$versions.glide"
implementation "com.github.bumptech.glide:annotations:$versions.glide"

更新了代码,没有地方使用GlideApp

fun ImageView.loadImg(imageUrl: String) {

// 3.8.0
//    if (!TextUtils.isEmpty(imageUrl)) {
//        Glide.clear(this)
//
//        Glide.with(context).load(imageUrl)
//                .diskCacheStrategy(DiskCacheStrategy.ALL)
//                .placeholder(ColorDrawable(Color.LTGRAY))
//                .into(this)
//    }

///
// 4.+ code
    var requestOptions : RequestOptions = RequestOptions()
        .placeholder(ColorDrawable(Color.LTGRAY))
        .diskCacheStrategy(DiskCacheStrategy.ALL)

    if (!TextUtils.isEmpty(imageUrl)) {
        Glide.with(context)
            .setDefaultRequestOptions(requestOptions)  
            .asBitmap()
            .load(imageUrl)
            .into(this)
    }
}

fun ImageView.clear() {
    Glide.with(this.context).clear(this)
}

Glide.with()崩溃

    java.lang.AbstractMethodError: abstract method "void    com.bumptech.glide.module.RegistersComponents.registerComponents(android.content.Context, com.bumptech.glide.Glide, com.bumptech.glide.Registry)"
    at com.bumptech.glide.Glide.initializeGlide(Glide.java:270)
    at com.bumptech.glide.Glide.initializeGlide(Glide.java:223)
    at com.bumptech.glide.Glide.checkAndInitializeGlide(Glide.java:184)
    at com.bumptech.glide.Glide.get(Glide.java:168)
    at com.bumptech.glide.Glide.getRetriever(Glide.java:689)
    at com.bumptech.glide.Glide.with(Glide.java:716)

如果添加

@GlideModule
class DPAppGlideModule : AppGlideModule() {
    override fun isManifestParsingEnabled(): Boolean {
        return false
    }
}

它可以工作,但是因为这是一个库模块,所以它不应该有这个模块。

AbstractMethodError: abstract method "void com.bumptech.glide.module.RegistersComponents.registerComponents(android.content.Context, com.bumptech.glide.Glide, com.bumptech.glide.Registry)"可能是什么原因?

还应避免使用GlideApp以外的任何内容?

1 个答案:

答案 0 :(得分:0)

在此库模块中发现,它间接依赖于正在使用Glide3且具有Old GlideModule的用户,而Old GlideModule无法实现Glide 4所需的功能。

Glide 4的module.registerComponents(applicationContext,glide,glide.registry);接受3个参数,但滑翔3仅有2个

 for (com.bumptech.glide.module.GlideModule module : manifestModules) {
      module.registerComponents(applicationContext, glide, glide.registry);
    }