我创建了一个打包为 .aar 文件的Android库。
我的库内部使用了Squares Retrofit库的v1.8.0。
我的图书馆的最终用户也在使用Retrofit,但他们使用的是2.0.1。
当他们尝试运行他们的app时会出现问题,当它到达我的库中调用v2中不再存在的Retrofit函数的行时会抛出java.lang.NoClassDefFoundError
。
dependencies {
compile 'com.mylibrary.sdk:mylibrary:1.0.1@aar'
compile 'com.squareup.retrofit:retrofit:1.8.0'
...
compile 'com.squareup.retrofit:retrofit:2.0.1'
}
我想知道是否有一种标准的处理方法吗?
想到的简单选择是:
这两种选择都是短期的。另外,例如,如果我们升级到Retrofit 2并且新的最终用户出现使用Retrofit 1,我们将面临同样的问题,但反过来。
已经做过一些研究,创建一个完整的 .aar 构建或使用着色,可能是解决方案。如果有人能够阐明在这种情况下如何使用它们将会非常感激。
答案 0 :(得分:0)
问题可能在其他地方。这并不是因为缺少某些方法,因为Retrofit的新版本(2.X.X
)可以与旧版本(2.0.0
)并行工作。因此,如果将两个版本都正确导入到项目中,您应该能够同时使用Retrofit
和Retrofit2
。这是可能的,因为新版本的库具有不同的包(retrofit2.Retrofit
而不是retrofit.Retrofit
)。
您确定您的图书馆包含Retrofit
1.8.X
吗?也许它只是使用了库中的方法,但1.8.X
版本未附带aar
版本?这实际上解释了很多。
你能做的是:
Retrofit
的两个版本,除了您的图书馆。
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
或
Retrofit
(1.X.X
)的正确版本包含在您的资源库aar
中。