多模块Android应用中Hilt因双Application类引发依赖注入异常
多模块Android应用中Dagger Hilt的Application冲突解决方案
核心结论
不能直接指定Hilt使用第二个模块的Application类,因为Android应用运行时仅能存在一个Application子类实例,该实例由AndroidManifest.xml中<application>标签的android:name属性决定。你当前运行的是主模块的AndroidAppApplication,而第二个模块标注@HiltAndroidApp的SecondModule并未被系统初始化,因此Hilt检测到当前Application未被@HiltAndroidApp标记,触发报错。
可行解决方案
方案1:统一使用主模块Application作为Hilt入口
- 删除第二个模块中
SecondModule类的@HiltAndroidApp注解 - 在主模块的
AndroidAppApplication类上添加@HiltAndroidApp注解 - 确保第二个模块中需要依赖注入的组件(如Activity、Fragment)添加
@AndroidEntryPoint注解,同时模块内的依赖注入模块(@Module标注的类)通过@InstallIn指定合适的组件作用域(如SingletonComponent、ActivityComponent等)
方案2:让第二个模块可独立运行(作为单独App)
- 为第二个模块创建独立的
AndroidManifest.xml,在其中将android:name指定为第二个模块的SecondModule类 - 配置构建变体,编译时根据需求选择主模块或第二个模块的Application配置,实现两个模块各自独立运行
关键注意事项
- 所有标注
@AndroidEntryPoint的组件,其依附的Application必须被@HiltAndroidApp标注,这是Hilt的强制规则 - 多模块架构下,
@HiltAndroidApp仅需在根App模块(主模块)配置一次,其他功能模块只需提供@Module形式的依赖配置,无需重复声明@HiltAndroidApp类
内容的提问来源于stack exchange,提问作者nikolas1903
相关产品推荐
相关产品推荐

