Android-您应如何管理多个模块?清单,等级等。

时间:2018-08-23 21:54:13

标签: android module android-gradle android-manifest

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

但是我一直在做噩梦。 我已经尝试过在线搜索,但是里面没有太多文档吗?

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

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

对于构建级别,我仅将运行基本/即时应用程序所需的库放入库中(以使其尽可能小)。然后,已安装的gradle将具有完整应用程序的所有其他库。如果我用     实施项目(“:base”) 它将自动获取base使用的所有依赖项吗?还是我需要重新声明这些? 我问,因为在构建应用程序后,firebase和firestore在获取带有消息“找不到Firestore模块”的实例时导致异常,这使其看起来好像没有正确引入依赖项?

对于冗长的帖子,我深表歉意,但是老实说,我在这里束手无策。真的卡住了!

1 个答案:

答案 0 :(得分:0)

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

假设您有一个名为“ 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类别声明的活动。