Glide v4使用教程(1)——下载和安装

1,738 阅读4分钟

下载和安装

文章主要内容翻译自 Glide 官方文档

Android Sdk 要求

同时满足以下条件:

  • compileSdk >= 27
  • minSdk >= 14

下载

使用 gradle 或者 maven。

gradle

需要 google 和 mavenCentral 仓库:

repositories {
    google()
    mavenCentral()
}

添加依赖:

dependencies {
    compile 'com.github.bumptech.glide:glide:4.14.2'
    // Skip this if you don't want to use integration libraries or configure Glide.
    annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2'
}

译者注:创建安卓项目的时候默认就有这两个仓库,不必手动配置。在高版本的 gradle 中 compile 已经被弃用,请使用 implementation 代替。这里就不过多介绍安卓项目如何添加 gradle 依赖了。

注意:无论什么时候都尽可能避免在依赖中使用 @aar ,如果确实要使用,请添加 transitive = true,来保证所有必要的类都被包含到你的 apk 中。比如:

dependencies {
    implementation ("com.github.bumptech.glide:glide:4.14.2@aar") {
        transitive = true
    }
}

@aar 是 gradle 的 "Artifact only" 注解,默认排除了依赖的依赖。

译者注:aar 参考安卓官方文档 创建 Android 库,transitive 为 true 则表示下载依赖的依赖,否则只是下载该 aar 包,而不下载该 aar 包所依赖的库。

使用 @aar 而不使用 transitive = true 会排除掉 Glide 的依赖,这将导致运行时异常,例如:

java.lang.NoClassDefFoundError: com.bumptech.glide.load.resource.gif.GifBitmapProvider
    at com.bumptech.glide.load.resource.gif.ByteBufferGifDecoder.<init>(ByteBufferGifDecoder.java:68)
    at com.bumptech.glide.load.resource.gif.ByteBufferGifDecoder.<init>(ByteBufferGifDecoder.java:54)
    at com.bumptech.glide.Glide.<init>(Glide.java:327)
    at com.bumptech.glide.GlideBuilder.build(GlideBuilder.java:445)
    at com.bumptech.glide.Glide.initializeGlide(Glide.java:257)
    at com.bumptech.glide.Glide.initializeGlide(Glide.java:212)
    at com.bumptech.glide.Glide.checkAndInitializeGlide(Glide.java:176)
    at com.bumptech.glide.Glide.get(Glide.java:160)
    at com.bumptech.glide.Glide.getRetriever(Glide.java:612)
    at com.bumptech.glide.Glide.with(Glide.java:684)

Maven

添加依赖:

<dependency>
    <groupId>com.github.bumptech.glide</groupId>
    <artifactId>glide</artifactId>
    <version>4.14.2</version>
    <type>aar</type>
</dependency>
<dependency>
    <groupId>com.google.android</groupId>
    <artifactId>support-v4</artifactId>
    <version>r7</version>
</dependency>
<dependency>
    <groupId>com.github.bumptech.glide</groupId>
    <artifactId>compiler</artifactId>
    <version>4.14.2</version>
    <optional>true</optional>
</dependency>

配置

根据实际需求,你可能需要做如下的额外配置。

权限

如果访问的数据都存储在应用中,Glide 则无需任何额外的权限。但是,大多数应用程序要么在设备上加载图像(在 DCIM 中,图片或 SD 卡上的其他地方),要么从互联网加载图像。因此,您需要根据实际情况包含下面列出的一个或多个权限。

网络

如果从 url 或通过网络连接加载图像,则应该在 AndroidManifest.xml 中添加 INTERNETACCESS_NETWORK_STATE 权限。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.package.name"

    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 允许 Glide 监控连接状态。当网络从断开变成连接时,Glide会重新开始之前失败请求 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application>
      ...
    </application>
</manifest>

在技术层面,ACCESS_NETWORK_STATE 权限并不是 Glide 加载 url 所必需的,但它可以帮助 Glide 处理不稳定的网络连接和飞行模式。更多细节请参见下面的连接监控部分。

连接监控

如果你从url加载图片,Glide可以自动帮助你处理不稳定的网络连接,它会监控用户的连接状态,并在用户重新连接时重新启动失败的请求。如果 Glide 检测到 application 具有ACCESS_NETWORK_STATE 权限,它将自动监视连接状态,无需进一步更改。

你可以通过检查 ConnectivityMonitor 日志标记来验证 Glide 是否正在监控网络状态:

adb shell setprop log.tag.ConnectivityMonitor DEBUG

如果你成功添加了 ACCESS_NETWORK_STATE 权限,那么执行命令后,你将在logcat中看到如下日志:

11-18 18:51:23.673 D/ConnectivityMonitor(16236): ACCESS_NETWORK_STATE permission granted, registering connectivity monitor
11-18 18:48:55.135 V/ConnectivityMonitor(15773): connectivity changed: false
11-18 18:49:00.701 V/ConnectivityMonitor(15773): connectivity changed: true

如果缺少权限,你会看到一个错误:

11-18 18:51:23.673 D/ConnectivityMonitor(16236): ACCESS_NETWORK_STATE permission missing, cannot register connectivity monitor

本地存储

要从 DCIM 或 Pictures 等本地文件夹加载图像,需要添加 READ_EXTERNAL_STORAGE 权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.package.name"

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application>
      ...
    </application>
</manifest>

要使用 ExternalPreferredCacheDiskCacheFactory 将 Glide 的缓存存储在公共 sd 卡上,你需要使用 WRITE_EXTERNAL_STORAGE 权限:

Proguard

Proguard 配置包含在 Glide 库中,但如果您需要自定义,请参阅 Glide’s proguard file

译者注:ProGuard 是一可以缩小、优化和混淆 Java 字节代码的工具。

Java 8

从 Android Studio 3.0 和 Android Gradle plugin 3.0 版本开始,你可以用 Java 8 编译你的项目和 Glide。有关详细信息,请参见 Android 开发者网站上的 Use Java 8 Language Features

Glide 需要 Java 11 编译,但生成的源代码与 Java 7 兼容(测试和示例代码除外)。

配置 Glide / 注解处理器

配置 Glide,需要包含 Glid e的一个注解处理库。

Java

如果你使用的是Java,包含 Glide 的注解处理器需要一个 Glide 的注解依赖和一个注解处理器:

compile 'com.github.bumptech.glide:annotations:4.14.2'
annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2'

Kotlin - KAPT

如果你在 Kotlin 实现的类上使用 Glide 的注解,你可以在 Glide 的注解处理器上包含一个 kapt 依赖,而不是一个 annotationProcessor 依赖:

dependencies {
  kapt 'com.github.bumptech.glide:compiler:4.14.2'
}

注意,你还必须在 build.gradle 中包含 kotlin-kapt 插件:

apply plugin: 'kotlin-kapt'

记住,如果你有任何其他注释处理器,都必须将它们全部从 annotationProcessor 转换为 kapt。

dependencies {
  kapt "android.arch.lifecycle:compiler:1.0.0"
  kapt 'com.github.bumptech.glide:compiler:4.14.2'
}

有关 kapt 的更多详细信息,请参阅 [Kotlin 官方文档] (kotlinlang.org/docs/kapt.h…

Kotlin - KSP

如果你对使用 KSP 感兴趣,可以依赖 Glide 的 KSP 支持。

添加插件:

apply plugin: 'com.google.devtools.ksp'

然后添加 Glide 的 KSP 依赖:

ksp 'com.github.bumptech.glide:ksp:4.14.2'

注意:KSP 处理器不支持 Glide 已弃用的 API。如果你引用生成的类(GlideAppGlideRequests 等),在使用 KSP 之前,需要用非生成的等价类替换它们。详情请参阅 Generated API

译者注:Generated API 已经被弃用。