如何只暴露核心模块导入多模块SDK项目

How to import multi-module SDK project by exposing its core module only

我正在开发一个应该作为 Android sdk 工作的项目,该项目包括:

mainSdkModule 以这种方式导入 moduleAmoduleB

implementation project(':moduleA')
implementation project(':moduleB')

我将整个项目发布为我想在另一个应用程序项目中使用的 SDK。 为了测试这个 SDK 的集成,我暂时将它发布到我本地的 maven 文件夹中。发生的事情是,当我将 sdk 导入应用程序项目时,构建失败并出现以下错误:

Could not find sdk-main-package:moduleA:unspecified.
Required by:
    project :mainSdkModule > sdk-main-package:core:1.0.0

我可以通过将每个模块发布为独立库来避免此错误,但我需要将它们保留在内部而不公开它们。

app 项目要求的依赖项甚至不应该被 sdk 项目之外的其他项目可见,这是否正常? 我如何在核心中包含 moduleAmoduleB 并为导入 SDK 的人授予对它们的访问权限而不在 Maven 上公开这些内部模块?

在Android工作室
这样做:
1-文件 -> 项目结构
2-select 来自左侧菜单的依赖项
3-select 您在屏幕顶部中间看到 + 和 - 的应用,点击 +
4-select 模块依赖并勾选你的 mainSdkModule 并将它添加到你的应用程序模块
5-select mainSdkModule 然后点击 + 勾选 ModuleA 和 ModuleB
6-申请并构建您的项目

模块 A 和 B 被声明为外部依赖项,并将在 pom.xml 文件中引用。像这样:

<dependency>
   <groupId>sdk-main-package</groupId>
   <artifactId>moduleA</artifactId>
   <version>unspecified</version>
   <scope>compile</scope>
</dependency>

你想要的是创建一个 fat jarfat aar。胖 jar/aar 是一个 jar/aar 文件,它还包含依赖项(而不是将它们引用为外部依赖项)。我不知道你的 SDK 需要是一个 jar 文件还是一个 aar 文件,如果你不知道,那么你可以找出区别,例如这里:Android Archive Library (aar) vs standard jar.

如果你需要一个 fat jar 那么你可以使用 Shadow 插件:https://imperceptiblethoughts.com/shadow/introduction.

如果你需要 fat aar 那么你可以,例如使用这个:https://medium.com/android-news/android-fat-aar-from-gradle-892038facc87。还有其他解决方案,但我没有亲自测试过它们中的任何一个,所以不知道哪些真正有效。如果你 google fat aar 你会得到很多点击,我希望其中之一能解决你的问题。