【问题标题】:How to release an android SDK with third party dependencies?如何发布具有第三方依赖项的 android SDK?
【发布时间】:2016-07-21 21:11:14
【问题描述】:

我开发了一个 android SDK 来使用我们的 RESTful API。我在我的 SDK 中使用了第三方库,如 retrofit2 和 rxandroid。

dependencies 
{
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
}

我向客户发布了一个 aar 文件。他的应用程序导入了我的 aar 文件并直接使用了我的由 retrofit2 实现的服务来使用 API。问题是他的应用程序还需要在他的依赖项部分中包含 retrofit2 和 rxandroid 依赖项。有没有办法让我的客户直接使用我的服务而不在他的依赖项部分添加依赖项?因为我不希望我的客户知道我在我的 SDK 中使用了哪些库。

提前致谢。

【问题讨论】:

    标签: android retrofit2 rx-android


    【解决方案1】:

    据我所知,您不能在 aar 中包含 aars。他们没有配置文件来说明他们需要什么依赖项。你可以

    1. 从你正在使用的库中剥离源代码并用你的 aar 编译它

    2. 考虑上传到bintrayMaven Central Repository

    第二个更可取,因为这样您的所有客户端只需包含一个链接,如compile 'com.abc.efg:version' 即可获取所有依赖项。这也是一个更好的选择,因为有处理版本冲突的方法(例如exclude group)。

    想象一下,如果您的客户正在使用另一个 sdk,而该 sdk 正在引入不同版本的改造。如果您的 aar 是通过第一种方法提供给他们的,那么由于版本冲突,他们甚至根本无法构建项目。然而对于第二个版本,他们可以简单地做

    compile ('com.abc.efg:version') { exclude group: 'com.squareup.retrofit2' }
    

    并摆脱所有这些头痛。一个真实的例子是 Facebook 的 SDK。它引入了 google 的 play-services,但人们通常已经将其作为项目的依赖项包含在内,并遇到this 之类的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 2020-07-30
      • 2019-02-18
      • 1970-01-01
      相关资源
      最近更新 更多