创建一个依赖多个AAR的AAR
我正在努力构建可用于其他应用程序的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)
正如你所看到的,我们有3个不同的库,我们工作的每个库都是我们系统中的一个模块(infra,ui和协议)。 他们每个人都在创建一个AAR。
我们的SDK是一些API层调用的封装器。
我们想创建一个依赖所有其他AAR的AAR,但是由于某种原因,当我们试图运行它时,它说他找不到某些类的源代码。
我发现了一些与这个问题有关的问题,但他们没有奏效。 也尝试使用transitive
依赖,但底线是相同的 - 无法找到源代码。
transitive
依赖关系。 还有什么我们可以做的吗?
从我的答案这里:
据我所知,你不能在空中加入空气。 他们没有说明他们需要什么依赖关系的配置文件。 你也可以
从您正在使用的库中剥离源代码并使用您的aar进行编译。 如果UI / Protocal / Infra库是内部的,并且您是唯一的提供者,这将完成这项工作。
考虑上传到bintray或Maven Central Repository
第二个是更可取的,因为这样你所有的客户端必须做的就是包含一个链接,比如compile 'com.abc.efg:version'
来获取你配置的所有依赖关系。 这也是一个更好的选择,因为有处理版本冲突的方法(例如使用exclude group
)。
想象一下,如果你的客户正在使用另一个sdk,这个sdk拉入了不同版本的UI / Protocal / Infra。 如果你的aar是通过第一种方法提供给他们的,那么由于版本冲突,他们甚至不能构建项目。 然而,对于第二个版本,他们可以简单地做
compile ('com.abc.efg:version') { exclude group: 'com.companyName.ui' }
并避免所有的头痛。 一个真实的例子是Facebook的SDK。 它吸引了谷歌的播放服务,但人们往往已经将其作为他们项目的依赖项,并遇到类似的问题。
由于您的项目通常依赖于内部和第三方库。 内部库可以在Artifactory存储库上发布,并通过Gradle解决Artifactory上的依赖关系。
这很容易! 只要通过下面的文章,
这是高度可扩展的,并且易于在多个模块中维护代码。
希望这会帮助你!
链接地址: http://www.djcxy.com/p/92561.html