Как устранить ошибку AbstractMethodError при обновлении до Glide 4.9.0

это находится в модуле библиотеки, поэтому он не должен использовать сгенерированный 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, также следует избегать?


person lannyf    schedule 21.02.2019    source источник


Ответы (1)


Оказывается, в этом библиотечном модуле он косвенно зависит от кого-то, кто использует Glide3 и имеет Old GlideModule, который не выполняет функцию, требуемую Glide 4.

Модуль Glide 4 module.registerComponents (applicationContext, glide, glide.registry); взять 3 параметра, но у Glide 3 только два

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