我正在构建一个可以在其他应用程序中使用的SDK。
我的项目结构如下:
ProjectFolder
|
+--AndroidLibs
| |
| +--UI (android library - AAR)
| |
| +--Protocol (android library - AAR)
| |
| +--infra (android library - AAR)
|
+--SDK(depends on UI, Protocol and Infra)
|
+--APP(depends on SDK)正如您所看到的,我们有三个不同的库,每个库都是我们系统中的一个模块(下面,ui和协议)。他们中的每一个都在创建一个AAR。
我们的SDK是一个包装器,带有对底层的一些API调用。
我们希望创建一个依赖于所有其他AAR的AAR,但由于某种原因,当我们尝试运行它时,它说他找不到某些类的源代码。
我发现了一些与这个问题有关的问题,但它们没有起作用。还试图处理transitive依赖项,但底线是相同的--找不到源代码。
transitive依赖项。我们还能做些什么吗?
发布于 2016-07-21 22:42:08
从我的回答这里
据我所知,您不能将aars包含在aar中。它们没有说明所需依赖项的配置文件。你可以
第二种方法更可取,因为这样您的客户端所要做的就是包括一个链接,比如compile 'com.abc.efg:version',以获取您配置的所有依赖项。这也是一个更好的选择,因为有处理版本冲突的方法(例如。( exclude group)。
想象一下,如果您的客户端正在使用另一个sdk,它正在引入不同版本的UI/Protocal/Infra。如果您的aar是通过第一种方法提供给他们的,由于版本冲突,他们甚至无法构建项目。然而,对于第二个版本,他们可以简单地完成
compile ('com.abc.efg:version') { exclude group: 'com.companyName.ui' }别再头痛了。一个真实的例子是Facebook的SDK。它吸引了google的播放服务,但人们通常已经把它作为他们项目的依赖项,并遇到了像这这样的问题。
发布于 2016-07-27 16:50:01
因为您的项目通常同时依赖内部库和第三方库。内部库可以发布在Artifactory存储库上,并使用Gradle解决对Artifactory的依赖关系。
这很容易!看看下面的文章,
这是高度可伸缩的,并且易于跨多个模块维护您的代码。
希望这能帮到你!
https://stackoverflow.com/questions/38440975
复制相似问题