关于集成库
原文链接:点击查看
介绍
为了让 Glide 的功能得到扩展,Glide 提供了集成库支持。集成库彼此的大小和应用范畴均有所区别,但大多数做的事情都类似于和网络库集成,或者添加新的解码类型支持。将这些扩展放到单独的类库中,可以让用户自行选择他们想要的功能,同时通过排除不那么有用的功能来减少 APK 的大小和应用程序占用空间。
本部分提供了由 Glide 维护的每个可用集成库的信息。
FAQ
我如何依赖一个集成库?
依赖集成库有三个部分:
- 在你的构建中包含对应的 Maven, Gradle 或 jar 依赖。集成库是可选的,它们没有被包含在 Glide 的 jar 或 maven 依赖中。
- 按照 配置页中的应用程序设置步骤 操作,并确保包含了一个
AppGlideModule
及一个 Glide 的注解处理器的依赖。 - 如果你使用 Maven 或 Gradle,则请包含集成库自身的依赖。否则请将集成库的 jar 包添加到你的项目中。
得益于 Glide 的注解处理器和每个集成库里的 LibraryGlideModule
,大部分集成库将自动开始工作。特定的依赖和集成步骤将在这个章节的每个集成库的页面单独列出。
为什么要包含集成库?
我们坚信,你对一个媒体库的选择不应该听命于你在应用中使用的网络库,也不应该要求你添加一个网络库而只用于加载图片。集成库和 Glide 的 ModelLoader 系统允许开发者在应用中使用一个一致的平台来提供所有的网络操作。
为什么 XXX 库没有实现呢?
因为就等你来写呢 XD ! OkHttp 和 Volley 是比较流行的库,很多开发者都会用到,但并不意味着我们排斥任何其他的库。如果你的应用中为另一个库编写了一个 ModelLoader,并且你希望将它开源,我们非常乐见 Pull Request 以支持额外的库。
我应该使用集成库的哪个版本?
从 Glide v4 开始,集成库的版本将会与主 Glide 库完全相同。你使用的集成库版本应该完全对应你所依赖的 Glide 版本。使用 Glide 和 集成库的不同版本可能导致应用崩溃、编译错误,或甚至未定义行为。
我如何使用特定版本的 OkHttp,Volley,或其他第三方库?
Glide 的集成库所集成的第三方库可能有他们自己的版本系统。通常集成库依赖第三方库的是通过过渡 (transitive) 的 Maven/Gradle 依赖。当使用 Maven 或 Gradle 依赖第三方库时,你可以通过显式地在使用到的地方包含第三方库来复写第三方库的版本。
例如,为了复写 Glide 的 okhttp-integration
库所集成的可能稍旧的 OkHttp 版本,你可以直接依赖 OkHttp 3.9.1:
implementation com.squareup.okhttp3:okhttp:3.9.1
implementation com.github.bumptech.glide:okhttp-integration:4.11.0
为了更好地控制,你也可以从 okhttp-integration
库中排除过渡依赖:
implementation (com.github.bumptech.glide:okhttp-integration:4.11.0) {
exclude group: com.squareup.okhttp3, module: okhttp
}
或你可以简单地排除所有 okhttp-integration
库的所有过渡依赖:
implementation (com.github.bumptech.glide:okhttp-integration:4.11.0) {
transitive = false
}
如果我依赖了某个集成库,但我想自行注册 ModelLoader 或其他组件怎么办?
默认情况下,大部分集成库将有一个 LibraryGlideModule
,它将会在你依赖到这个库时自动注册这个库的组件。某些时候,可能会希望能排除掉一些默认组件,或者使用不同的顺序重新注册它们,或者干脆重新定制它们。为了达成这种目的,你需要这么做:
-
避免默认的
LibraryGlideModule
被 Glide 的注解处理器包含 请为你的AppGlideModule
添加一个Excludes
注解,并引用你想排除的LibraryGlideModule
类:@Excludes(com.example.unwanted.GlideModule.class) @GlideModule public final class MyAppGlideModule extends AppGlideModule { }
请参阅 配置页 的详细信息。
-
在你自己的
LibraryGlideModule
或AppGlideModule
中注册组件: 在你的AppGlideModule
中,你可以实现registerComponents
方法以添加任何你想注册的ModelLoader
或其他组件:@GlideModule public class YourAppGlideModule extends AppGlideModule { @Override public void registerComponents(Context context, Glide glide, Registry registry) { registry.append(Photo.class, InputStream.class, new CustomModelLoader.Factory()); } }
请参阅 配置页 的详细信息。