在模块之间共享组件

时间:2016-01-15 09:04:49

标签: android android-studio intellij-idea module

在我的项目中,我有一个主app模块,它依赖于我为项目添加的子模块,让我们说一个用于自定义警报对话框,另一个用于自定义视图等等...

如何从主应用程序模块获取子模块中的值的引用? 例如,具有布局xml的自定义警报对话框需要采用主应用程序模块中的颜色值。

我尝试将主app模块添加为子模块中的依赖项,但由于存在循环依赖,因此肯定不会起作用。

2 个答案:

答案 0 :(得分:14)

说明:

尝试使用下一个规则组织子模块:

1)。 主应用模块 ActivityFragment + xmlayouts

没有模块必须依赖于此模块。此模块将依赖于 资源模块,子模块1,子模块2.

请勿在此模块中存储任何共享值,例如colorsdimens等。

2)。 资源模块包含colorsattrsdimens等。

只需创建android库模块并在此处仅存储共享资源。此模块必须没有依赖项。每个需要资源的模块都依赖于这个模块。

带有自定义提醒的

3)。 子模块1

此模块取决于 资源模块

带有自定义视图的

4)。 子模块2

此模块取决于 资源模块

Diagramm:

enter image description here

代码:

https://github.com/AlexanderGarmash/AndroidModulesShowcase

说明

<module_root>/app/build.gradle依赖项部分:

compile project (':ResourceModule')
compile project (':Submodule1')
compile project (':Submodule2')

<module_root>/ResourceModule/build.gradle依赖项部分:

没有

<module_root>/Submodule1/build.gradle依赖项部分:

compile project (':ResourceModule')

<module_root>/Submodule2/build.gradle依赖项部分:

compile project (':ResourceModule')

优点:

  • 低耦合
  • 透明结构

缺点:

  • 如果你有很多模块,你不要忘记链接到ResourceModule无处不在。

更新

不要忘记导入正确的R类。 enter image description here

答案 1 :(得分:1)

如果要在库中使用资源值,则应在库模块而不是app模块中添加资源值。因为在添加库时,app可以使用库的资源,反之亦然。