为[Class]生成MembersInjector.更喜欢在该类上运行匕首处理器

zna*_*nat 18 android dagger-2

我有这些警告,我不明白他们的意思.有人能指点我吗?

对于我注入的类(有component.inject(this)声明)

Note: Generating a MembersInjector for [class] Prefer to run the dagger processor over that class instead.
Run Code Online (Sandbox Code Playgroud)

对于我正在注入的对象(带有注释的constuctor @Inject)

Note: Generating a Provider for [class]. Prefer to run the dagger processor over that class instead.
Run Code Online (Sandbox Code Playgroud)

gk5*_*885 6

当Dagger的注释处理器运行时,它会生成两种类:

  1. @Component接口的实现
  2. ProviderMembersInjector每种@Inject'd类型的实现.

在生成@Component接口实现时,它会根据模块的配置方式连接每个实现ProviderMembersInjector实现.如果您的组件或其中的任何模块指的@Inject是在没有 Dagger处理器的情况下编译的'd类型,它仍然会生成Provideror MembersInjector,但是每个组件生成一次,而不是为@Inject'd class 生成一次.

这不是一个真正的问题(因此不是警告或错误),但它确实意味着可能让Dagger处理器为单个应用程序多次生成相同的类.如果它真的失控,它可能会减慢编译速度,并且会占用更多的字节码.

简单的解决方法是确保在编译@Inject'd类型以及组件时运行Dagger注释处理器.

  • 以及如何确保在编译@Inject类型时运行Dagger注释处理器? (34认同)
  • 是的,这个答案非常模糊.这里没有人用`javac`编译他们的Android项目. (3认同)