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

Sir*_*lot 5 android project-structure gradle android-library kotlin

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

?? androidLibraryModule
?
?? kotlinLibraryModuleA
?
?? kotlinLibraryModuleB
Run Code Online (Sandbox Code Playgroud)

哪里androidLibraryModule取决于kotlinLibraryModuleAkotlinLibraryModuleB

dependencies {
    implementation project(":kotlinLibraryModuleA")
    implementation project(":kotlinLibraryModuleB")
}
Run Code Online (Sandbox Code Playgroud)

我将发布的唯一.aar内容是构建的结果,androidLibraryModule我希望它包含来自kotlinLibraryModuleA和的代码kotlinLibraryModuleA。到目前为止,我已经找到了实现这一目标的唯一途径是通过复制.jar的文件kotlinLibraryModuleA,并kotlinLibraryModuleBlibs的文件夹androidLibraryModule是这样的:

task copyJar(type: Copy) {
    from jar
    into "${project(":androidLibraryModule").projectDir.absolutePath}/libs"
}

jar.finalizedBy(copyJar)
Run Code Online (Sandbox Code Playgroud)

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

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

fer*_*ini 0

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

如果您只想将库发布为aar,您有 2 个选择:

  • 将依赖项作为 jar 包含在里面 - 这称为 fat jar/aar (快速搜索发现了多个插件,但我对其中任何一个都没有经验,所以你需要自己看看)
  • 如果你将库发布到maven,你可以在 中指定它的依赖项pom.xml,例如。这个答案:Android 库依赖项从 POM with Gradle 中丢失