doe*_*doe 8 java android android-gradle-plugin clean-architecture android-architecture
我有一个以模块化方式构建的Android项目.我按照干净的架构,通过在多个Gradle模块之间划分源代码来模块化项目.
这是App的结构.
此层次结构中的顶层模块App是其他模块所不依赖的模块,是应用程序的主要模块.下级模块domain和data不依赖于上App模块,其中所述App模块包括data和domain模块.我在app模块的build.gradle中添加了以下代码
implementation project(':domain')
api project(':data')
Run Code Online (Sandbox Code Playgroud)
现在,我在维护每个模块的依赖关系时遇到了一些问题.由于它们中的每一个都是一个单独的android模块,因此每个模块都有自己的模块build.gradle.该App模块可以使用data和domain模块中的类.但是,我有一些通用的类,(例如一些注释,实用程序,广播类,Dagger范围等),我想在所有模块中使用它们.但这些是我面临的问题
- 由于这些类都包含在主模块中
app,我不能在我访问这些data和domain,因为这些模块不依赖于更高层app- 我在所有层中使用的任何库(例如:RxJava)都需要包含在
build.gradle每个模块中
作为解决方案,我想添加一个更多的android模块,比如common哪个将包含我所有的通用类以及我在所有模块中使用的库.
我的所有其它模块app,domain以及data将具有该模块作为一个依赖.
implementation project(':common')
Run Code Online (Sandbox Code Playgroud)
因此,任何全局库和类都将添加到此模块中,并且每个单独的模块将只具有特定于模块的类.
这是一个好方法吗?或者有没有办法有效地解决这个问题?
Jak*_*eam 10
我们最近遇到了这个问题,因为我们转换到一个多模块项目进行重用,构建时间优化(未重新编译未更改的模块)等.您的核心目标是使您的app模块尽可能小,因为它将被重新编译每次.
我们使用了一些通用原则,可以帮助您:
base-ui模块包含主strings.xml,styles.xml等profile,dashboard等等)实现这个base-ui模块.base-ui,api而不是implementation.base-data,dashboard-data等模块,遵循同样的逻辑.dashboard功能模块依赖于dashboard-data.app模块仅取决于特性模块,dashboard,profile等.我强烈建议事先草拟出你的模块依赖流程,我们最终得到了大约15个模块,都是严格组织的.在你的情况下,你提到它已经是一个相当大的应用程序,所以我想象app需要功能模块从中拉出来,就像它一样domain.请记住,小模块=需要重新编译的代码更少!
我们遇到了一些问题,确保在所有子模块中使用相同版本(buildType,flavors)的应用程序.实质上,所有子模块必须具有与模块相同的flavors和buildTypes app.
另一方面,多模块开发确实让您考虑依赖关系,并强制执行功能之间的严格分离.您可能会遇到一些您以前从未考虑过的意外问题.例如,显示应用程序版本这样简单的东西突然变得复杂(免责声明:我的文章).
本文还帮助我们决定了我们的方法.您链接的文章似乎也是一个很好的资源,我希望它在我们过渡时存在!
在评论讨论之后,这是一个示例图(不幸的不整洁,但足以说明这个概念.请注意区分api和implementation将是一个很好的下一步):

| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |