安卓Glide(4.7.1)使用筆記 01 - 引入專案

JoezShare發表於2018-04-20

Glide,一個被google所推薦的圖片載入庫,作者是bumptech。這個庫被廣泛運用在google的開源專案中。經過多年的迭代,Glide已經成為了安卓開發者最喜愛的圖片載入庫之一。新版本的使用方式和以前的3.x.x在使用存在區別,以下是演示最新版本的Glide的使用,Glide新的版本也做了較多的優化和更多功能的實現。

以下是官方簡介,專注於順暢滑動的圖片載入庫
官方地址 :https://github.com/bumptech/glide

An image loading and caching library for Android focused on smooth scrolling

1、配置到Android專案

Gradle方式
repositories {
  mavenCentral()
  google()
}

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.7.1'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
}
複製程式碼
下載Jar包方式

地址:https://github.com/bumptech/glide/releases

新增混餚
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}
-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder
# for DexGuard only
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
複製程式碼
新增許可權
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
複製程式碼

ACCESS_NETWORK_STATE 這個許可權不是必須的

如果你正在從 URL 載入圖片,Glide 可以自動幫助你處理片狀網路連線:它可以監聽使用者的連線狀態並在使用者重新連線到網路時重啟之前失敗的請求。如果 Glide 檢測到你的應用擁有 ACCESS_NETWORK_STATE 許可權,Glide 將自動監聽連線狀態而不需要額外的改動。

要從本地資料夾或 DCIM 或相簿中載入圖片,你將需要新增 READ_EXTERNAL_STORAGE 許可權

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
複製程式碼

而如果要使用 ExternalPreferredCacheDiskCacheFactory 來將 Glide 的快取儲存到公有 SD 卡上,你還需要新增 WRITE_EXTERNAL_STORAGE 許可權:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
複製程式碼

2、一句程式碼簡單使用

Glide.with(this)
     .load("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524215585000&di=bfce834d92cbdd3ded74d695cf5c8638&imgtype=0&src=http%3A%2F%2Fimage5.tuku.cn%2Fpic%2Fwallpaper%2Fmeinv%2Frenbihuajiaominv%2F010.jpg")
     .into(ivImage);
複製程式碼

在用以上程式碼載入到圖片之前,我遇到了一個問題,載入圖片的時候報錯了。 錯誤資訊

java.lang.NoSuchMethodError: No static method getFont
複製程式碼

一看錯誤日誌就知道是版本衝突了,最後去官網看了下,Glide最新版本是需要

Minimum Android SDK: Glide v4 requires a minimum API level of 14 Compile Android SDK: Glide v4 requires you to compile against API 26 or later

而我使用的版本是

 implementation 'com.android.support:appcompat-v7:26.1.0'
 implementation 'com.android.support:support-v4:26.1.0'
複製程式碼

Glide使用的版本是 27.0.2 ,所以導致衝突了,下面是解決方案

1、升級自己的版本到27.0.2
2、使用exclue排除衝突 (我使用的方法)
3、降級Glide到 4.3.1

我使用的方法

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //noinspection GradleCompatible
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support:support-v4:26.1.0'
    implementation('com.github.bumptech.glide:glide:4.7.1') {
        exclude group: "com.android.support"
    }
    annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

複製程式碼

載入到的效果圖如下

美女

相關文章