Android模块未声明依赖时如何感知其他模块?以NowInAndroid为例
关于NowInAndroid模块依赖的两个问题解答
1. :feature:foryou未直接依赖:core:domain和:core:data却能导入类的原因
这是Gradle传递依赖的特性在起作用:
- Android Gradle模块的依赖默认是传递性的——如果模块A依赖模块B,模块B依赖模块C,那么模块A会自动获得对模块C的访问权限,无需在A的build.gradle中显式声明依赖C。
- 在NowInAndroid项目中,:feature:foryou必然依赖了某个中间模块(比如:core:ui或:core:common这类共享核心模块),而这个中间模块直接依赖了:core:domain,同时:core:domain又依赖了:core:data(或中间模块同时依赖这两个核心模块)。这种依赖链会把:core:domain和:core:data的类传递到:feature:foryou的类路径中,因此可以直接导入这些类。
- 至于Hilt注入能正常工作,是因为Hilt的绑定(比如@Inject构造函数、@Module中的@Provides方法)只要存在于类路径中,Hilt的注解处理器就能扫描到并生成对应的注入代码,不需要模块显式声明直接依赖,只要类能被访问到即可。
2. :feature:foryou作为:app的依赖,不会从:app获取资源
Gradle模块的依赖是单向的:
- 当:app声明依赖:feature:foryou时,依赖关系是
:app → :feature:foryou,只有:app可以访问:feature:foryou的资源、类等内容。 - :feature:foryou无法访问:app中的任何资源或代码,因为它并没有依赖:app,模块只能访问自己直接或间接依赖的模块内容,不能反向访问依赖自己的模块。
内容的提问来源于stack exchange,提问作者jvds01
相关产品推荐
相关产品推荐

