Android:如何创建一个没有冲突依赖的库

Posted

技术标签:

【中文标题】Android:如何创建一个没有冲突依赖的库【英文标题】:Android : How to create a library without conflicting dependencies 【发布时间】:2021-11-27 18:31:17 【问题描述】:

我正在创建一个最终将用于我的许多应用程序的 android 库。 假设此库具有版本 1.0 的依赖项 X。 如果主应用程序想要使用版本 0.5 的依赖项 X 怎么办?我不希望主应用程序通过 gradle 排除依赖项的过程。还有其他方法吗?我想更改名称或为我的库中的依赖项提供别名?这甚至可能吗?

【问题讨论】:

【参考方案1】:

如果 gradle 在依赖关系图中找到两个(或更多)版本的依赖项,它将默认选择最新版本。大多数库保证向后兼容性,因此通常可以正常工作。 Gradle 还提供了很多钩子让客户端选择不同的策略。

如果您真的希望实用程序的使用者在其类路径上拥有两个版本的(共享/传递)依赖项,您需要重新打包依赖项,以便每个类移动到不同的包,因为您只能拥有一个版本类路径上的每个(完全限定的)类名

要重新打包 jar,请查看 shadow plugin。许多库(例如 hibernate 和 spring)选择重新打包/隐藏 ASM jar 以避免冲突。

请注意,99% 的时间重新打包 jar 是错误的选择,您应该让正常的依赖关系解析过程发生

见understanding dependency resolution

【讨论】:

以上是关于Android:如何创建一个没有冲突依赖的库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Qt Creator创建一个不依赖于Android的单个本机共享库

google-services 15之后的依赖性冲突

如何从具有 gradle 依赖关系的代码创建一个 Android 库?

java maven项目中的库版本冲突

应用程序和第三方库android之间的库版本冲突

终极方案:快速解决Android项目依赖冲突