我在Android Studio中创建了一个库(aar),其中包含一些依赖于Joda Time类的实用程序方法。我正在使用jcenter中的依赖项和gradle文件中的以下代码行
编译' joda-time:joda-time:2.9.4'
然后我将我的库添加到私有maven存储库并创建了一个新的Android项目,并从此repo中添加了我的库。
当我尝试在新项目中使用我的库方法时,我收到以下错误: -
java.lang.NoClassDefFoundError:org.joda.time.DateTime
我尝试回到我的图书馆而不是通过jcenter包含joda时间我将.jar文件直接添加到我的&#lib;'文件夹,这次当我尝试我的新项目中的方法时,我们没有得到上述错误。
这是否意味着从jcenter中包含依赖项实际上并未编译到aar文件中?有办法吗?
答案 0 :(得分:1)
AAR文件只包含已编译的dex代码,清单(部分)和库的资源。当您将joda-time的jar文件复制到项目中时,它会内置到AAR中。当使用gradle依赖项时,gradle(以及Android Studio)知道如何解析用于构建AAR的joda-time库,但就是这样。由于您的AAR是在jcenter上发布的,因此您需要为AAR提供maven清单,该清单还将joda-time列为依赖关系。之后,项目将只能将您的库列为依赖项,并且可以通过gradle(通过其maven支持)解决对joda-time的依赖性。