3

我开发了一个android库。该库依赖于appcompat-v7. 我的消费者也依赖appcompat-v7. 发布到 maven 存储库时,如何最正确地从 libray 公开我的 appcompat 依赖项?

我现在在做什么

  • appcompat-v7依赖项列为implementation库中的依赖项
  • 使用android-maven-publish发布 POM 文件,这会导致依赖项与 Scope "runtime" 一起列出

然而,通过这种设置,库的版本偏好会影响消费者。这是消费者项目视图的屏幕截图,其中库版本使用 v27.0.0,消费者设置为 26.1.0:

在此处输入图像描述

v27.0.0 优先于 v26.1.0,导致编译器错误(因为片段签名已更改)。

有没有办法通过配置不同的库来避免这种情况,或者这应该是结果吗?假设应该在库和消费应用程序中允许不同版本的 appcompat 库,我错了吗?我是否应该发布多个二进制文件,每个都针对不同版本的支持库编译以满足任何给定的消费者设置?

4

1 回答 1

1

有没有办法通过配置不同的库来避免这种情况,或者这应该是结果吗?

不幸的是,这是预期的结果。这个问题的原因是JVM不允许有多个具有相同包和名称的类。

假设应该在库和消费应用程序中允许不同版本的 appcompat 库,我错了吗?

正如我所说,这是一个JVM限制。

我是否应该发布多个二进制文件,每个都针对不同版本的支持库编译以满足任何给定的消费者设置?

这是您唯一的解决方案,即使这样做也很痛苦。

于 2017-10-31T11:00:37.743 回答