如何只暴露核心模块导入多模块SDK项目
How to import multi-module SDK project by exposing its core module only
我正在开发一个应该作为 Android sdk 工作的项目,该项目包括:
- 用于演示的应用程序模块
- 一个名为 mainSdkModule 的模块
- mainSdkModule 中使用的其他次要模块(比如模块 A 和模块 B)
mainSdkModule
以这种方式导入 moduleA
和 moduleB
:
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 项目之外的其他项目可见,这是否正常?
我如何在核心中包含 moduleA
和 moduleB
并为导入 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 jar 或 fat 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
你会得到很多点击,我希望其中之一能解决你的问题。
我正在开发一个应该作为 Android sdk 工作的项目,该项目包括:
- 用于演示的应用程序模块
- 一个名为 mainSdkModule 的模块
- mainSdkModule 中使用的其他次要模块(比如模块 A 和模块 B)
mainSdkModule
以这种方式导入 moduleA
和 moduleB
:
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 项目之外的其他项目可见,这是否正常?
我如何在核心中包含 moduleA
和 moduleB
并为导入 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 jar 或 fat 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
你会得到很多点击,我希望其中之一能解决你的问题。