【问题标题】:Create an AAR that depends on multiple AARs创建一个依赖于多个 AAR 的 AAR
【发布时间】:2016-07-18 15:46:51
【问题描述】:

我正在努力构建一个可以在其他应用程序中使用的 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 依赖项,但底线是一样的 - 找不到源代码。

  1. android-studio-how-to-package-single-aar-from-multiple-library-projects:一个回答说没有解决方案(谷歌员工)。
  2. create-an-aar-with-multiple-aars-jars:使用 transitive 依赖项。
  3. Create Mojo for creating AAR with all "aar" dependencies

我们还有什么可以做的吗?

【问题讨论】:

  • afaik aars 没有此功能,因为它们不包含 .pom 之类的文件。最好的办法是将其上传到 jcenter 或 maven。从那里人们将能够拉出你的 aar 以及所有配置为一起的 aar。
  • 另一种选择是从每个依赖项中提取 src 代码,将其作为 *.java 文件放入您的 src 中,然后将整个内容编译成 .aar

标签: android gradle module android-gradle-plugin aar


【解决方案1】:

来自我的answer here

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

  1. 从您正在使用的库中剥离源代码并使用您的 aar 编译它。如果 UI/Protocal/Infra 库在内部并且您是唯一的提供者,这将完成这项工作。

  2. 考虑上传到bintrayMaven Central Repository

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

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

compile ('com.abc.efg:version') { exclude group: 'com.companyName.ui' }

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

【讨论】:

  • 感谢您的回复。 1.库确实是内部的,但是跨团队,有一些产品在使用它们,所以我们不能这样做。 2.这是计划,但奇怪的是gradle不支持这种配置。我认为“传递”应该解决这个问题......
【解决方案2】:

因为您的项目通常依赖于内部和第三方库。内部库可以发布在 Artifactory 存储库上,并使用 Gradle 解决对 Artifactory 的依赖关系。

很简单!只需阅读以下文章,

这是高度可扩展的,并且很容易跨多个模块维护您的代码。

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-29
    • 2016-04-04
    • 2014-05-27
    • 1970-01-01
    • 2016-07-10
    • 2022-07-24
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多