创建一个依赖多个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依赖,但底线是相同的 - 无法找到源代码。

  • android-studio-how-to-package-single-aar-from-multiple-library-projects:一个回答说没有解决方案(Google员工)。
  • 创建一个与aar-aar-with-multiple-aars-jar:使用transitive依赖关系。
  • 创建Mojo以创建具有所有“aar”依赖项的AAR
  • 还有什么我们可以做的吗?


    从我的答案这里:

    据我所知,你不能在空中加入空气。 他们没有说明他们需要什么依赖关系的配置文件。 你也可以

  • 从您正在使用的库中剥离源代码并使用您的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://jeroenmols.com/blog/2015/08/06/artifactory/
  • https://inthecheesefactory.com/blog/how-to-setup-private-maven-repository/en
  • 这是高度可扩展的,并且易于在多个模块中维护代码。

    希望这会帮助你!

    链接地址: http://www.djcxy.com/p/92561.html

    上一篇: Create an AAR that depends on multiple AARs

    下一篇: JavaScript Regular Expression Email Validation