Glide笔记(一)AppGlideModule

Glide 4.11 异常:GeneratedAppGlideModuleImpl + Glide4.10以上异常异常:原因:第一种解决办法第二种解决办法三,也能是混淆的问题帮助: 异常: java.lang.IllegalStateException: GeneratedAppGlideModuleImpl is implemented incorrectly. If you've manually implemented this class, remove your implementation. The Annotation processor will generate a co 阅读详情

配置:
1)添加依赖

 implementation 'com.github.bumptech.glide:glide:4.11.0'
 annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'

2)自定义类继承AppGlideModule,添加类注解@GlideModule,实现方法isManifestParsingEnabled(),并返回false如:

@GlideModule
public class CustomGlideModule extends AppGlideModule {
@Override
    public boolean isManifestParsingEnabled() {
        return false;
    }

`
3)之后可以通过重写其中的方法applyOptions(…)以及registerComponents(…)实现自己需要的配置,如:


```java
@Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        File externalFilesDir = context.getExternalFilesDir(null);
        if (externalFilesDir != null) {
            String diskCacheFolder = externalFilesDir.getAbsolutePath();
            Log.e("TAG", "diskCacheFolder->" + diskCacheFolder);
            builder.setDiskCache(new DiskLruCacheFactory(diskCacheFolder, "imageCache", (1024 * 1024 * 50)));
        } else {
            Log.e("TAG", "null->");
        }
    }
4)在AndroidManifest.xml中<application>中添加<meta-data>项,如:

```java
<meta-data
            android:name="com.zjb.glide.CustomGlideModule"
            android:value="AppGlideModule"/>

5)混淆配置

-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 *;
}
-keep class com.bumptech.glide.GeneratedAppGlideModuleImpl {*;}

至此配置完成,初始化Glide时,会引用自定义的CustomGlideModule.

简单记下通过注解和实现自动引用CustomGlideModule的流程:
1)Glide初始化时首先调用Glide中的

@VisibleForTesting
  public static void init(@NonNull Context context, @NonNull GlideBuilder builder) {
    GeneratedAppGlideModule annotationGeneratedModule = getAnnotationGeneratedGlideModules(context);
    synchronized (Glide.class) {
      if (Glide.glide != null) {
        tearDown();
      }
      initializeGlide(context, builder, annotationGeneratedModule);
    }
  }

2)其中代码:

GeneratedAppGlideModule annotationGeneratedModule = getAnnotationGeneratedGlideModules(context);

生成的GeneratedAppGlideModule对象为其实现类GeneratedAppGlideModuleImpl,这个类为编译后自动生成的(注意,如果配置混淆,此类也不应该被混淆),可以看看这个类的内容:

final class GeneratedAppGlideModuleImpl extends GeneratedAppGlideModule {
  private final CustomGlideModule appGlideModule;

  public GeneratedAppGlideModuleImpl(Context context) {
    appGlideModule = new CustomGlideModule();
    if (Log.isLoggable("Glide", Log.DEBUG)) {
      Log.d("Glide", "Discovered AppGlideModule from annotation: com.zjb.CustomGlideModule");
    }
  }

  @Override
  public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
    appGlideModule.applyOptions(context, builder);
  }

  @Override
  public void registerComponents(@NonNull Context context, @NonNull Glide glide,
      @NonNull Registry registry) {
    appGlideModule.registerComponents(context, glide, registry);
  }

  @Override
  public boolean isManifestParsingEnabled() {
    return appGlideModule.isManifestParsingEnabled();
  }

  @Override
  @NonNull
  public Set<Class<?>> getExcludedModuleClasses() {
    return Collections.emptySet();
  }

  @Override
  @NonNull
  GeneratedRequestManagerFactory getRequestManagerFactory() {
    return new GeneratedRequestManagerFactory();
  }
}

可以看到它持有一个我们定义的CustomAppModule对象,实现的接口方法也是通过调用CustomAppModule对象的方法实现。
3)之后我们继续看Glide的初始化过程会调用方法initializeGlide(…),其代码如下:

 .......................
 if (annotationGeneratedModule != null) {
      annotationGeneratedModule.applyOptions(applicationContext, builder);
    }
.........................
if (annotationGeneratedModule != null) {
      annotationGeneratedModule.registerComponents(applicationContext, glide, glide.registry);
    }    

也就是上面提到的实现类GeneratedAppGlideModuleImpl中方法的调用,GeneratedAppGlideModuleImpl中的方法是调用他持有的CustomAppGlideModule对象的方法。

glide替换okhttp以及更改连接超时时间(TIME_OUT) Glide替换okhttp,更改超时时间,看似简单,具体写的过程中坑还是真多,特记录一下,也帮助需要的人。本文基于Glide 4.x。首先,替换okhttp,官方给了一个及其简单的方式。implementation "com.github.bumptech.glide:okhttp3-integration:4.6.1"这个地方是有一个坑的。我实际做的时候,发现加上这一句以后,图片死活加载不出来了... 阅读详情

相关推荐

Glide:AppGlideModule

上面代码中,getAnnotationGeneratedGlideModules方法就是创建GeneratedAppGlideModuleImpl这个类的,GeneratedAppGlideModuleImpl类自动生成的位置在build目录下。开发人员就可以自己去控制了。那GeneratedAppGlideModuleImpl这个类是什么时候被用到的呢,我们回到Glide.java中,加入我们使用下面代码。加入我也不想用okHttp,我想自己写一个网络请求,让Glide使用可不可以,当然可以。

bdmh的专栏 844

每天记录学习的新知识 : AppGlideModule

Glide4.10以上的版本必须配置,但是可以不启用,如下isManifestParsingEnabled=false。AppGlideModule就是Glide的全局配置文件,4.0以上添加的,之前是GlideModule。Glide默认使用HttpURLConnection做网络请求,在这切换成Okhttp请求。磁盘缓存配置(默认缓存大小250M,默认保存在内部存储中)Glide默认使用低质量的RGB565,如果想使用高质量。设置磁盘缓存保存在自己指定的目录下,且指定缓存大小。............

嗯... 3789

RH850_U2A系列HSM安全核开启但是固件未烧录导致无法启动也无法再烧入固件废板问题分析解决

hsm核导致的安全锁死补救方案

u011941262的博客 1734

GlideModule AppGlideModule和Generated API详解

GlideModule是3.x下的,已经废弃,这里还是有必要简单介绍下。首先下定义,GlideModule是干什么的,源码文档的第一句话就告诉我们使用来做“懒配置”的。但我没发现到底懒在哪里了?官方文档也没说,想了半天,发现可能是我理解错了,这里的“懒”根本就不是“延迟”的意思,而是“懒惰”的意思。说白了就是统一配置,这样在使用的时候就不用每个都配置了。这样我们就可以“偷懒”了。与其说是“懒配置”,我觉得用“预配置“可能更好点。紧接着官方给了一个例子。}}https。...

ScottePerk的博客 2026

Windows系统3D Gaussian Splatting环境搭建全攻略:从零开始到成功运行

本文详细介绍了在Windows系统上搭建3D Gaussian Splatting环境的完整流程,包括CUDA 12.6安装、Anaconda环境配置、代码获取与依赖安装等关键步骤。针对Windows平台特有的环境配置问题,提供了实用的解决方案和常见错误排查方法,帮助开发者快速实现3D Gaussian Splatting的成功运行。

weixin_30832143的博客 454

课设报告-超市收银系统 javaweb(附源代码)

超市收银系统由收银员输入顾客的会员卡卡号(若有卡),所购买的货号。从数据库中取出有关价格信息,在把这些信息返回给收银台,同时把收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。另外,对没有卡的消费不记录该顾客的消费情况扥个人信息,如果一个未持卡顾客一次购买满200元,可围棋发放一张会员卡,以后在该商场购物可享受9折优惠。

m0_71106830的博客 2975

Android Glide自定义AppGlideModule,让Glide在app启动后基于定制化GlideModule加载,kotlin

在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。《Android图片加载与缓存开源框架:Android Glide》Android Glide是一个开源的图片加载和缓存处理的第三方框架。

Zhang Phil 2753

OpenDataLab 大模型训练数据集下载记录

大模型 训练数据集

u013558123的博客 3347

Android Glide AppGlideModule DataFetcher loadThumbnail, Kotlin

从很小的宽高开始,不断迭代增加setRectToRect的目标RectF的宽高,每次迭代加上一定时延,实现Matrix基础上的动画。【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。

Zhang Phil 1266

课设:FPGA音频均衡器 verilog设计及仿真 加报告

未来,随着FPGA技术的进一步发展和应用场景的扩大,FPGA音频均衡器将发挥出更大的作用,并为音频领域带来更多创新和突破。(a)音乐制作:均衡器可以调整音频信号中不同频段的能量分布,使得乐器声音更加明亮、动感,从而提升音乐制作的质量和创作的灵活性。以上步骤提供了设计一个音频均衡器的大致过程,但值得注意的是,具体实现的细节和复杂度可能因设计要求和所使用的平台而有所不同。确保设计满足预期的性能和要求。确定均衡器的功能和要求:定义你的音频均衡器需要实现的功能,包括频率范围、增益范围以及可调参数数量等。

QQ_778132974的博客 1588

17、深入分析Freebase数据集:特征、挑战与类型系统构建

本文深入分析了Freebase数据集的特征、数据建模的挑战以及类型系统的构建方法。Freebase作为知识图谱的重要资源,以RDF三元组形式提供了丰富的结构化知识。文章重点探讨了反向三元组、中介节点(CVT节点)以及非主题三元组对链接预测任务的影响,并通过实验展示了不同类型处理策略对模型性能的作用。此外,文章详细介绍了如何构建一个显式的类型系统,以提升链接预测的准确性,并展望了未来可能的研究方向。

css33的专栏 287

Android Glide配置AppGlideModule定制化线程池,Kotlin(1)

在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。文章浏览阅读670次。假设实现一个简单的功能,对传入要加载的path路径增加一定的筛选、容错或“重定向”,需要自定义一个模型,基于这个模型,让Glide自动匹配模型展开加载。文章浏览阅读670次。

Zhang Phil 2182

自动驾驶领域自动化数据标注应用

自动驾驶领域自动化数据标注应用 1. 背景介绍 1.1 自动驾驶技术的发展 自动驾驶技术近年来取得了长足的进步,吸引了众多科技公司和传统车企的投入。自动驾驶系统需要感知周围环境、做出决策并控制车辆,是一个极具挑战的任务。其中,环境感知是自

AI天才研究院 2214

记录Glide自定义AppGlideModule不起作用的问题

记录Glide自定义AppGlideModule不起作用的问题

bxjxxyy的博客 2024

昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子

【代码】昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子。

william_myq的博客 507

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android Glide 的简单使用(一)

Glide 提供了许多可应用于单一请求的选项,包括变换、过渡、缓存选项等。1.默认选项可以直接应用于请求上:GlideApp.with(this).load(uri).placeholder(R.mipmap.sc2).error(R.mipmap.sc1).override(150).circleCrop().into(agb.ivOptions);2.通过 RequestOptions 类来在多个请求之间共享:RequestOptions requestOptions = new RequestOpti

2401_84545830的博客 1606

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

GlideModule过时使用AppGlideModule

这里写自定义目录标题GlideModule过时使用AppGlideModule GlideModule过时使用AppGlideModule 在自定义GldieModule时,使用GlideModule提示过时了, * @deprecated Libraries should use {@link LibraryGlideModule} and Applications should use * {@link AppGlideModule}. 那我们就使用AppGlideModule,去网上搜一下怎么配置

caobin_study的博客 2167

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Glide AppGlideModule

子module重写AppGlideModule,主app module重写的话,子module会被主module覆盖

u014637710的博客 1245

Glide加载Https图片出错,解决:Glide+okhttp

直接使用Glide不能加载https图片,需要加入okhttp依赖,并重写AppGlideModule Android studio版本:3.5;Glide版本4.9 一,添加依赖 //解决Glide找不到Android声明库问题 annotationProcessor'androidx.annotation:annotation:1.0.0' //glid...

qq_38961813的博客 1910

Android运行时报错:@GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be....

  Jackson主要包括三个包内容:jackson-core 核心包、jackson-annotations 注解包和jackson-databind 数据绑定包,jackson-databind 使用时需要引用另外两个包   下载地址:   Jackson 官网地址   Jackson GitHub地址   Jackson Maven地址   截止目前最新的Jackson版本...

No errors,no gains! 3091

glide性能优化实战

Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode pipeline),以及自动的资源池技术。Glide 支持拉取,解码和展示视频快照,图片,和GIF动画。Glide的Api是如此的灵活,开发者甚至可以插入和替换成自己喜爱的任何网络栈。默认情况下,Glide使用的是一个定制化的基于HttpUrlConnection的栈,但同时也提供了与Google Volley和Square OkHttp快速集成的工具库。

我怀里的猫的博客 1265

Glide4.x的使用

最近从Glidev3升级到了Glide4.x,我用的是最新的Glide4.8哈,由于3.x到4.x的变化还是很大的,在此记录一下,也和需要的朋友分享一下。 使用 1、在app的build.gradle中添加如下配置 dependencies { //Glide框架引入 compile 'com.github.bumptech.glide:glide:4.8.0' annotatio...

刘鑫的博客 1363

Glide4.0 加载https图片不出来,解决方法

Glide加载https 的图片会出现下面异常: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.这个异常,导致图片加载不出来 解决步骤: 1./* glide */ 在glid...

一站到底s的博客 6116

驾驭 Glide 的引擎:深度解析 Module 与集成之道

你可以精确地控制数据流、缓存行为和资源解码的每一个环节,从而为你的应用打造出最高效、最稳定、最定制化的图片加载方案。// 2. 根据你的自定义格式解析字节,创建你的自定义资源对象 MyCustomResource。新闻类App可能需要较大的磁盘缓存,而相机类App可能更需要大的内存缓存和Bitmap池。// 如果你没有使用任何第三方库的LibraryGlideModule,或者想完全手动控制,可以禁用它。,它可以帮你清晰地看到图片加载的每个阶段(缓存命中、网络请求、解码过程),是性能分析和问题定位的神器。

专注于移动开发的干货分享。提供高效解决方案、避坑指南与前沿技术解析。为开发者创造价值。 1465

Glide 4.9.0 kotlin

报错信息: W/Glide: Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule anno...

u012797388的博客 763

glide设置一天缓存_三方库源码笔记(10)-Glide 你可能不知道的知识点

前阵子定了个小目标,打算来深入了解下几个常用的开源库,看下其源码和实现原理,进行总结并输出成文章。初定的目标是 EventBus、ARouter、LeakCanary、Retrofit、Glide、Coil、OkHttp 等七个。目前已经完成了九篇关于 EventBus、ARouter、LeakCanary、Retrofit、Glide 的文章,本篇是第十篇,来对 Glide 的一些扩展知识点进...

weixin_36238982的博客 530
上一篇: WAV文件格式解析
下一篇: Bitmap详细讲解
java_for
博客等级 码龄12年 6粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值