【问题标题】:How to import multi-module SDK project by exposing its core module only如何通过仅暴露其核心模块来导入多模块SDK项目
【发布时间】:2021-12-28 14:34:16
【问题描述】:

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

  • 一个用于演示的应用模块
  • 名为 mainSdkModule 的模块
  • mainSdkModule 中使用的其他次要模块(比如 moduleA 和 moduleB)

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

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

应用程序项目要求的依赖项甚至不应该被除 sdk 之外的其他项目可见的依赖项是正常的吗? 如何在核心中包含 moduleAmoduleB 并为那些导入 SDK 而不在 maven 上暴露这些内部模块的人授予访问权限?

【问题讨论】:

    标签: android maven gradle module dependencies


    【解决方案1】:

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

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

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

    如果您需要胖罐,那么您可以使用Shadow 插件:https://imperceptiblethoughts.com/shadow/introduction

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

    【讨论】:

      【解决方案2】:

      在 Android Studio 中
      这样做:
      1-文件 -> 项目结构
      2-从左侧菜单中选择依赖项
      3-选择您在屏幕顶部中间看到 + 和 - 的应用,点击 +
      4-选择模块依赖并勾选您的 mainSdkModule 并将其添加到您的应用模块
      5-选择 mainSdkModule 并单击 + 并勾选 ModuleA 和 ModuleB
      6-应用并构建您的项目

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多