Android 都使用 Glide 的应用程序和库 - appPackage1.GlideRequests 无法转换为 appPackage2.GlideRequests

Android App and Library that both use Glide - appPackage1.GlideRequests cannot be cast to appPackage2.GlideRequests

我希望之前有人 运行 了解过这个,它只是一个我所缺少的简单设置。基本上我已经构建了一个使用 Glide 的 Kotlin 库,并使用 dagger 在该库中设置我的 glide 实例。这个库本身以及在虚拟应用程序中运行完美,没有问题。

我有一个旧的 Java 项目,我正在使用这个库对其进行测试。一切似乎都正常,除非我使用 Glide 功能点击屏幕。 Glide 在 App 和 Library 中都在使用,它们似乎在碰撞。

这是错误:

java.lang.ClassCastException: appPackage1.Utilities.GlideRequests cannot be cast to appPackage2.di.module.GlideRequests
        at appPackage2.di.module.GlideApp.with(GlideApp.java:88)

在旧的 Java 应用程序 Glide 中存在为:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

在我的 Kotlin 库中,Glide 存在为:

@GlideModule
class AppGlideModule : AppGlideModule()

当它从我的库中像下面这样调用时它会抛出错误:

GlideApp.with(requireContext()).load

看来我需要更深入地研究文档。

http://bumptech.github.io/glide/doc/configuration.html#avoid-appglidemodule-in-libraries

Avoid AppGlideModule in libraries

Libraries must not include AppGlideModule implementations. Doing so will prevent any applications that depend on the library from managing their dependencies or configuring options like Glide’s cache sizes and locations.

In addition, if two libraries include AppGlideModules, applications will be unable to compile if they depend on both and will be forced to pick one or other other.

This does mean that libraries won’t be able to use Glide’s generated API, but loads with RequestOptions will still work just fine (see the options page for examples).

还有一个相关的 Github 问题: https://github.com/bumptech/glide/issues/2393

希望如果其他人遇到这个问题,这个答案会有所帮助。