【问题标题】:Are dependencies from jcenter compiled into aar library?来自 jcenter 的依赖项是否编译到 aar 库中?
【发布时间】:2016-11-07 04:08:46
【问题描述】:

我在 Android Studio 中创建了一个库 (aar),其中包含一些依赖于 Joda Time 类的实用程序方法。我在我的 gradle 文件中使用来自 jcenter 的依赖项和以下代码行

编译'joda-time:joda-time:2.9.4'

然后,我将我的库添加到一个私有 maven 存储库并创建了一个新的 Android 项目,并将我的库从这个 repo 添加到它。

当我尝试在新项目中使用我的库的方法时,我收到以下错误:-

java.lang.NoClassDefFoundError: org.joda.time.DateTime

我尝试返回我的库,而不是通过 jcenter 包含 joda 时间,而是将 .jar 文件直接添加到我的“libs”文件夹中,这一次当我尝试新项目中的方法时,它们有效,但我没有得到上述错误。

这是否意味着从 jcenter 包含依赖项时实际上并未将依赖项编译到 aar 文件中?有办法吗?

【问题讨论】:

    标签: java android maven android-studio


    【解决方案1】:

    AAR 文件仅包含已编译的 dex 代码、清单(部分)和库的资源。当您将 joda-time 的 jar 文件复制到项目中时,它会内置到 AAR 中。使用 gradle 依赖项时,gradle(以及 Android Studio)知道如何解析 joda-time 库以构建 AAR,但仅此而已。由于您的 AAR 是在 jcenter 上发布的,因此您需要为您的 AAR 提供一个 maven 清单,其中还将 joda-time 列为依赖项。之后,项目将能够仅将您的库列为依赖项,并且对 joda-time 的依赖项将由 gradle(通过其 maven 支持)解决。

    【讨论】:

    • 这解释得很好,谢谢。我正在使用 maven-publish 并且只是发布 .aar 工件。我为此添加了依赖项并且它起作用了。
    • @omelette 和拉里,只是想把你的注意力吸引到stackoverflow.com/questions/53876071/…,因为我认为你已经找到了答案!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2016-07-10
    • 2016-06-07
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多