繁体   English   中英

Android库(.aar)使用与应用程序相同的gradle依赖关系-但版本不同,会导致NoClassDefFoundError

[英]Android library (.aar) using the same gradle dependency as app - but different versions, causes a NoClassDefFoundError

我已经创建了一个打包为.aar文件的Android库。

我的库在内部使用Squares Retrofit库的v1.8.0。

我的图书馆的最终用户也正在使用Retrofit,但是他们正在使用2.0.1。

当他们尝试运行他们的应用程序时出现问题,当java.lang.NoClassDefFoundError到达我的库中的一行,该行调用v2中不再存在的Retrofit函数时,将引发此错误。

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'
}

我想知道是否有解决此问题的标准方法?

想到的简单选择是:

  1. 我们将改造版本升级到2
  2. 最终用户将其改造版本降级为1

这两种选择都是短期的。 同样,例如,如果我们升级到Retrofit 2,并且出现了一个使用Retrofit 1的新最终用户,我们将面对相同的问题,但反过来。

已经进行了一些研究,创建一个完整的胖或使用阴影可能是解决方案。 如果任何人都能阐明在这种情况下如何使用它们,将不胜感激。

问题可能出在其他地方。 这与缺少某些方法无关紧要,因为新版本( 2.XX )的Retrofit可以与旧版本( 2.0.02.0.0 因此,如果两个版本都正确导入到项目中,则应该可以同时使用RetrofitRetrofit2 可能是因为新版本的库具有不同的包( retrofit2.Retrofit而不是retrofit.Retrofit )。

您确定您的1.8.X库包含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'

要么

  • 确保库的aar包含正确版本的Retrofit1.XX )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM