【问题标题】:Sharing components between modules在模块之间共享组件
【发布时间】:2016-04-20 20:08:53
【问题描述】:

在我的项目中,我有主应用程序模块,它依赖于我为项目添加的子模块,假设一个用于自定义警报对话框,另一个用于自定义视图等...

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

我尝试将主应用程序模块添加为子模块中的依赖项,但这肯定行不通,因为会有循环依赖项。

【问题讨论】:

    标签: android android-studio intellij-idea module


    【解决方案1】:

    说明:

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

    1). 主应用模块ActivityFragment + xmlayouts

    没有模块必须依赖于这个模块。该模块将依赖于资源模块、子模块 1、子模块 2。

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

    2). 资源模块colorsattrsdimens等。

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

    3)。 子模块 1 带有自定义警报。

    此模块将依赖于资源模块

    4). 子模块 2 带有自定义视图。

    此模块将依赖于资源模块

    图表:

    代码:

    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 类。

    【讨论】:

    • 在我移动所有资源(布局除外)后,我的可绘制对象中引用生成文件夹中的值的颜色不存在(例如@color/black 或@color/md_brown_800) .这些是构建中自动生成的值,当然不是我设置的。我该如何解决这个问题?
    • @RJFares 这很简单。在import 中,您应该检查是否从目标模块导入R 类,而不是从当前模块导入。因为每个模块都会生成R
    • @RJFares,例如资源模块为com.garmash.example.resource.lib.R
    • 如果我想在新模块中添加一张图片,那我该如何访问该图片呢?
    【解决方案2】:

    如果你想在库中使用资源值,你应该在库模块而不是应用模块中添加它们。因为添加库时,应用可以使用库的资源,反之则不能。

    【讨论】:

    • 那么我应该在 gradle 文件中添加什么? @Bhawna
    猜你喜欢
    • 2017-01-21
    • 1970-01-01
    • 2011-06-02
    • 2019-09-19
    • 2015-05-16
    • 2018-04-21
    • 2021-09-24
    • 2017-10-04
    • 2019-02-15
    相关资源
    最近更新 更多