创建依赖于多个 AAR 的 AAR

Create an AAR that depends on multiple AARs

我正在努力开发uild 一个可以在其他应用程序中使用的 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 个不同的库,每个库都是我们系统中的一个模块(下文,ui 和协议)。他们每个人都在创建一个 AAR。

我们的 SDK 是一个包装器,其中包含对较低层的一些 API 调用。

我们想创建一个依赖于所有其他 AAR 的 AAR,但是出于某种原因,当我们尝试 运行 它时,它说他找不到某些 类.

我发现了一些与此问题相关的问题,但它们没有用。 还尝试使用 transitive 依赖项,但底线是相同的 - 找不到源代码。

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

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

来自我的 :

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

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

  2. 考虑上传到 bintray or Maven Central Repository

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

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

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

并摆脱所有的头痛。一个真实的例子是 Facebook 的 SDK。它引入了 google 的播放服务,但人们通常已经将其作为项目的依赖项,并将 运行 纳入 .

等问题中

因为您的项目通常依赖于内部库和第三方库。内部库可以在 Artifactory 存储库上发布,并通过 Gradle.

解决对 Artifactory 的依赖关系

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

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

希望对您有所帮助!