我开发了一个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中使用了哪些库。
提前致谢。
答案 0 :(得分:1)
据我所知,你不能在aar里面包含aars。它们没有配置文件来说明它们需要哪些依赖项。你可以
从您正在使用的库中删除源代码并使用您的aar编译
第二个更为可取,因为这样所有客户端只需要包含compile 'com.abc.efg:version'
之类的链接来获取所有依赖项。它也是一个更好的选择,因为有一些方法可以处理版本冲突(例如exclude group
)。
想象一下,如果您的客户正在使用另一个正在进行不同版本改造的sdk。如果你的aar是通过第一种方法给他们的,那么由于版本冲突,他们甚至根本无法构建项目。但是对于第二个版本,他们可以简单地执行
compile ('com.abc.efg:version') { exclude group: 'com.squareup.retrofit2' }
并摆脱所有头痛。一个真实的例子是Facebook的SDK。它吸引了谷歌的游戏服务,但人们通常已将其作为项目的依赖项,并遇到像this这样的问题。