我开发了一个android库。该库取决于appcompat-v7
。我的消费者也依赖appcompat-v7
。在发布到maven存储库时,如何最正确地从libray中公开我的appcompat依赖项?
我现在在做什么
appcompat-v7
依赖项列为库中的implementation
依赖项然而,通过此设置,库的版本偏好会渗透到消费者身上。以下是消费者项目视图的屏幕截图,其中库版本使用v27.0.0,消费者使用26.1.0进行设置:
v27.0.0优先于v26.1.0,导致编译器错误(因为Fragment签名已更改)。
有没有办法通过将库配置为不同来避免这种情况,或者应该这是结果?假设应该允许在库和消费应用程序中使用不同版本的appcompat lib,我是错误的吗?我是否应该发布多个二进制文件,每个二进制文件都针对不同版本的支持库进行编译,以满足任何给定的消费者设置?
答案 0 :(得分:1)
有没有办法通过配置库不同来避免这种情况, 或者这应该是结果?
不幸的是,这是预期的结果。这个问题的原因是JVM
不允许多个具有相同包和名称的类。
假设appcompat lib的不同版本我错了 应该允许在图书馆和消费应用程序中使用吗?
正如我所说,这是一个JVM
限制。
我是否应该发布多个二进制文件,每个二进制文件都针对a编译 不同版本的支持库,以满足任何给定的消费者 设置?
这是你唯一的解决方案,即使这样做非常痛苦。