【问题标题】:Android - How should you manage multiple modules? Manifests, grades, etc.Android - 你应该如何管理多个模块?清单、等级等
【发布时间】:2018-08-23 21:54:13
【问题描述】:

我知道这个问题含糊不清,但有人可以概述规则和/或我们应该如何处理多个模块吗? 我一直在尝试将我的应用程序分成基本功能模块、应用程序模块和即时应用程序模块。

但是我一直在做噩梦。 我试过在网上搜索,但里面没有太多的文档?

我的基本模块清单中有两个活动,因为我希望在我的已安装应用程序和即时应用程序中都有这些活动。然后我是否需要将这些活动清单条目复制到我的其他清单中?我尝试在不添加这些活动的情况下运行我安装的 apk(我认为它可能会从基本模块中提取它),但随后 android studio 说找不到默认活动来启动应用程序。所以我需要将活动条目复制到所有清单中?

我还遇到了来自我正在使用的所有库的清单条目冲突。 FacebookInitProvider 、 FacebookInitProvider 、 CrashlyticsInitProvider 等。我在任何清单中都没有这些条目,它们将自己添加到每个清单中,从而在构建时导致合并冲突。

通过构建等级,我将运行基本/即时应用所需的库放入基础(以使其尽可能小)。安装的 gradle 然后具有完整大小的应用程序的所有额外库。如果我使用 实施项目(":base") 它会自动引入 base 使用的所有依赖项吗?还是我需要重新声明这些? 我问是因为在构建应用程序后,firebase 和 firestore 导致在获取实例时出现异常,并显示消息“未找到 Firestore 模块”,这使得它看起来好像没有正确提取依赖项?

对于这篇冗长的帖子,我深表歉意,但老实说,我已经走到了尽头。真的卡住了!

【问题讨论】:

  • 我也有同样的问题,你找到解决办法了吗?

标签: android module android-gradle-plugin android-manifest


【解决方案1】:

我不确定我是否正确理解了您的所有项目结构,因此我将为您提供有关带有模块的应用程序的一般信息:

假设您有一个名为“appone”的应用程序和一个名为“moduleone”的模块

在模块 gradle 文件中,您声明模块自身正常工作所需的最低要求,并且在清单中仅声明特定于模块的配置,不需要在 appone 清单中定义。

现在在 appone 清单中,这是主文件,您必须在此处设置活动声明和应用权限(不在 moduleone 中),android studio 会自动合并这两个文件,因此当您编译时会生成一个清单文件有两个清单内容,所以如果您在两个文件上声明相同或冲突的数据,这可能会产生冲突。

在 appone build.gradle 文件中,您可以在此处声明实现项目(':moduleone'),以及 appone 所需库的实现。 例如,如果 moduleone 使用 firebase 库,并且在 appone 中您还直接需要访问 firebase 库,您可以在两个 build.gradle 文件中声明它,您只需要确保两者使用相同的版本。

您还需要在 settings.gradle 文件中声明 moduleone,使用:include ':moduleone'

appone 被声明为 com.android.application,moduleone 被声明为 com.android.library。

appone 在其清单中也有一个声明为 LAUNCHER 类别的活动。

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多