如何在不使用Gradle复制jar的情况下将一个模块的源包含在另一个模块中?

问题描述

我想将Android库项目拆分为模块。预期的项目结构为:

├─ androidLibraryModule
│
├─ kotlinLibraryModuleA
│
└─ kotlinLibraryModuleB

androidLibraryModule取决于kotlinLibraryModuleAkotlinLibraryModuleB的地方:

dependencies {
    implementation project(":kotlinLibraryModuleA")
    implementation project(":kotlinLibraryModuleB")
}

我唯一要发布的是.aar,它是构建androidLibraryModule的结果,我希望它包含kotlinLibraryModuleAkotlinLibraryModuleA中的代码。 到目前为止,我发现实现此目标的唯一方法是将.jarkotlinLibraryModuleA的{​​{1}}文件复制到kotlinLibraryModuleB的{​​{1}}文件夹中方式:

libs

解决方案有效,但感觉有点像黑客。 这是唯一的解决方案,还是有更好的方法来实现此结果?

编辑:如果androidLibraryModule是Android应用程序模块,则无需复制任务即可正常工作。

解决方法

问题是,aar默认仅包含其模块中的代码和资源。创建应用程序时,库模块会将其依赖项传递给应用程序,因此所有类都包含在最终apk中。

如果您只想将图书馆发布为aar,则有2个选择:

  • 将依赖项包含在jar中-称为胖jar / aar(快速搜索发现了多个插件,但我对它们没有任何经验,因此您需要自己看看)
  • 如果将库发布为Maven,则可以在pom.xml中指定它的依赖项,例如。这个答案:Android library dependencies missing from POM with Gradle