【问题标题】:dependencies issue when adding library AAR添加库 AAR 时的依赖关系问题
【发布时间】:2018-03-28 00:22:34
【问题描述】:

我创建了一个希望能够在其他 Android 应用程序中使用的 Android 库。我在与库相同的项目中创建了一个小型测试应用程序,一切正常。

为了测试与其他应用程序的集成,我创建了一个新应用程序,并按照 this guide 通过从库的 AAR 文件创建一个新模块将我的库导入到该新应用程序。

build.gradle 文件:

dependencies {
    ...
    compile project(':my-sdk')
    ...
}

settings.gradle 文件:

include ':app', ':my-sdk'

编译成功,我可以在测试应用程序中使用库的 API,但运行时出现运行时异常

java.lang.NoClassDefFoundError: 解析失败: Lokhttp3/MediaType;

我认为这是一个依赖关系问题,因为该库使用 okhttp 作为依赖关系,这可能没有被打包在 AAR 文件中。我只是在任何地方都找不到如何编译这个依赖项,所以它可以在其他项目中工作。

【问题讨论】:

  • 一个 JAR 或 AAR 中没有依赖信息。将 AAR 发布到工件存储库(例如,Maven 样式的存储库,使用 Gradle 的 maven 插件),存储库元数据(例如,POM 文件)将具有传递依赖信息。针对存储库的工件进行编译的项目将自动引入这些传递依赖项。
  • @CommonsWare 我有同样的问题,我不想发布我的库(我想在 Unity3d 中使用它)在构建我的库时是否有另一种方法来提取依赖项?
  • @FarshidABZ:如果您将其打包为 JAR,则不会。如果您只在一个项目中使用库模块,只需将项目本身中的库模块作为完整源代码,传递依赖项将得到尊重。否则,根据定义,您将发布该库。我没有使用过 Unity3D,也无法评论它如何使用 Android 库。
  • “我确实试过了”——我不知道在你的问题中这意味着什么。例如,您不会将该导入过程与存储库中的库工件一起使用。您可以将您的存储库添加到您的repositories,然后为该库创建一个简单的compile 语句。 “我很确定我在某处遗漏了一些配置”——如果您使用 Maven 样式的存储库,请检查该存储库中 POM 文件的内容,并查看它是否在其中列出了您的传递依赖项。跨度>
  • @CommonsWare Unity3d 不使用 maven,因此我们必须将 jar/AAR 文件复制到项目中。如果我理解正确,我可以发布我的库并提取具有依赖项的 AAR 文件并将其放入另一个项目中。有教程链接可以使用吗?

标签: android android-gradle-plugin


【解决方案1】:

我修复它添加 jar 文件而不是使用 maven 到我的模块中,然后组装发布 aar,并在应用程序项目中禁用“即时运行”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2017-07-22
    • 2016-04-18
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多