android - 我可以保留依赖项使用的旧版本的库吗?
问题描述
我有一个 Android 项目,其中 Glide v4 是它的依赖项之一。
这个项目有另一个依赖,我们称之为它dependency A
,它依赖于 Glide v3。
我不知道这是否重要,但dependency A
只能作为 aar 包含在内。
所以这是我的一部分build.gradle
:
implementation(name: 'dependency_a', ext: 'aar')
implementation ("com.github.bumptech.glide:glide:4.7.1") {
exclude group: "com.android.support"
}
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
该应用程序可以编译;但是当dependency A
运行使用 Glide v3 的代码时:
Glide.with(context).load(imageUrl).asBitmap().into(new SimpleTarget<Bitmap>() {...}
该应用程序因以下消息而崩溃:
java.lang.NoSuchMethodError: No virtual method load(Ljava/lang/String;)Lcom/bumptech/glide/DrawableTypeRequest; in class Lcom/bumptech/glide/RequestManager; or its super classes (declaration of 'com.bumptech.glide.RequestManager' appears in /data/app/{my.package.name}}-LItMzBkBqXw3lyYYdKp-SA==/base.apk:classes15.dex)
我正在寻找一种保留 Glide v3 的方法dependency A
,但仍将 Glide v4 用于我的应用程序和其他依赖项。
甚至可能吗?
为什么我不简单地为我的应用程序使用 Glide v3
这是因为另一个dependency B
需要我使用 Glide v4。
解决方案
Gradle 的依赖解决方案是在有多个备选方案可用或需要时选择一个版本。
最终,给定 ClassLoader 中的给定类全名只能有一个类,因此可能性是:
更改包名称。例如 Spongy Castle 从 移动
org.bouncycastle.*
到org.spongycastle.*
以避免与平台的版本冲突。使用多个类加载器。我相信 Android 支持自定义类加载器,但这可能会涉及相当多的工作,并带有一些微妙的陷阱。
我认为不幸的是,在您的情况下,这都不是一个实际的解决方案。
推荐阅读
- python - 在 numpy 中使用网格网格进行条件操作并合并它们?
- python-3.x - Plot_confusioin_matrix 图没有显示整数值,而是显示了一些指数值
- performance - 在完成事务控制器内的所有请求时关闭线程组
- sql - 需要在 WHERE/HAVING 中使用 COUNT 来返回打开和关闭
- python - python中大型数据集的反向消除
- curl - 使用 curl 将新事件插入 CalDAV 日历
- react-native - React Native Maps 不会在 iOS 上重新渲染标记
- wso2 - WSO2 API Manager 正文中的两个参数
- python - 使用 Python Spark 从 Hadoop 表中提取 Json 对象的所有键
- javascript - 按键对 Javascript 对象进行排序