-
Notifications
You must be signed in to change notification settings - Fork 16
云课堂Glide 4.x 与 应用Glide 3.x 版本冲突解决方案
SHLURENJIA edited this page Jun 24, 2020
·
1 revision
云课堂模块使用的Glide版本为4.x,而有开发者的主工程使用的是Glide 3.x版本。
Glide从3.x升级到4.x之后,因为Glide变更,用法上产生了较大差异差异。而集成云课堂模块后,由于云课堂模块里面使用了4.x版本,as编译时会高版本覆盖低版本,整个应用将会同一使用了Glide4.x的依赖包,导致会出现Glide3.x升级4.x的问题。
推荐此方案。开发者可以直接使用云课堂提供的Glide版本,修改主工程的相关使用。
迁移内容可以参考官方文档:从v3迁移到v4
云课堂的Glide图片加载经过二次封装,开发者可以修改com.easefun.polyv.commonui.utils.imageloader下的代码。
由于部分开发者修改主工程代码较多,可以直接修改云课堂模块的imageloader相关源码,将其版本降低为3.x版本。参考步骤如下:
打开commonui/build.gradle依赖文件,修改如下代码:
dependencies {
//...省略部分依赖
//1、排除glide相关版本
api ('jp.wasabeef:glide-transformations:3.3.0'){
exclude group:'com.github.bumptech.glide',module:'glide'
}
//2、修改依赖版本
api ("com.github.bumptech.glide:okhttp3-integration:1.5.0@aar"){
exclude group:'com.github.bumptech.glide',module:'glide'
}
//3、注释取消引用,4.x版本开始支持
// annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
//4、添加3.x的Glide依赖
implementation 'com.github.bumptech.glide:glide:3.7.0'
}
- GlideImageLoadEngine.java
package com.easefun.polyv.commonui.utils.imageloader.glide;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.DrawableRes;
import android.support.annotation.WorkerThread;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.load.resource.gif.GifDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import com.easefun.polyv.commonui.utils.imageloader.IImageLoadEngine;
import com.easefun.polyv.commonui.utils.imageloader.IPolyvProgressListener;
import com.easefun.polyv.commonui.utils.imageloader.glide.progress.PolyvMyProgressManager;
import com.easefun.polyv.commonui.utils.imageloader.glide.progress.PolyvOnProgressListener;
import java.io.File;
import java.util.concurrent.ExecutionException;
public class GlideImageLoadEngine implements IImageLoadEngine {
@Override
public void loadImage(Context context, String url, ImageView imageView) {
Glide.with(context)
.load(url)
.into(imageView);
}
@Override
@WorkerThread
public File saveImageAsFile(Context context, String url) throws ExecutionException, InterruptedException {
return Glide.with(context)
.load(url)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.get();
}
@Override
public void loadImage(Context context, final String url, final int position, @DrawableRes int errorRes, final IPolyvProgressListener listener) {
PolyvMyProgressManager.removeListener(url, position);
PolyvMyProgressManager.addListener(url, position, new PolyvOnProgressListener() {
@Override
public void onProgress(String url, boolean isComplete, int percentage, long bytesRead, long totalBytes) {
listener.onProgress(url, isComplete, percentage, bytesRead, totalBytes);
}
@Override
public void onStart(String url) {
listener.onStart(url);
}
});
Glide.with(context)
.load(url)
.error(errorRes)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
listener.onFailed(e, model);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
PolyvMyProgressManager.removeListener(url, position);
listener.onProgress(url, true, 100, 0, 0);
return false;
}
})
.bitmapTransform(new CompressTransformation(context, url))
.into(new SimpleTarget<GlideDrawable>() {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
listener.onResourceReady(resource);
if (resource instanceof GifDrawable) {
resource.start();//显示gif
}
}
@Override
public void onDestroy() {
PolyvMyProgressManager.removeListener(url, position);
}
});
}
@Override
public void loadImageNoDiskCache(Context context, String url, @DrawableRes int placeHolder, @DrawableRes int error, ImageView imageView) {
Glide.with(context)
.load(url)
.placeholder(placeHolder)
.error(error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView);
}
@Override
public Drawable getImageAsDrawable(Context context, String url) {
try {
Bitmap bitmap = Glide.with(context)
.load(url)
.asBitmap() //必须
.into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.get();
return new BitmapDrawable(bitmap);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return null;
}
}
- CompressTransformation.java
package com.easefun.polyv.commonui.utils.imageloader.glide;
import android.content.Context;
import android.graphics.Bitmap;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.Transformation;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapResource;
import com.easefun.polyv.cloudclass.chat.send.img.PolyvSendChatImageHelper;
import java.io.File;
import java.security.MessageDigest;
/**
* 压缩
*/
public class CompressTransformation implements Transformation<Bitmap> {
private static final int VERSION = 1;
private static final String ID = "CompressTransformation." + VERSION;
private BitmapPool mBitmapPool;
private String mUrl;
CompressTransformation(Context context, String url) {
this(url, Glide.get(context).getBitmapPool());
}
private CompressTransformation(String url, BitmapPool pool) {
mBitmapPool = pool;
mUrl = url;
}
@Override
public boolean equals(Object obj) {
return obj instanceof CompressTransformation;
}
@Override
public int hashCode() {
return ID.hashCode();
}
@Override
public Resource<Bitmap> transform(Resource<Bitmap> resource, int outWidth, int outHeight) {
if (new File(mUrl).isFile()) {
try {
Bitmap bitmap = PolyvSendChatImageHelper.compressImage(mUrl);
if (bitmap != null) {
return BitmapResource.obtain(bitmap, mBitmapPool);
}
} catch (Exception e) {
}
}
return resource;
}
@Override
public String getId() {
return ID;
}
}
- PolyvProgressLibraryGlideModule.java
注释整个类文件或者移除