JessYanCoding / ArmsComponent

📦 A complete android componentization solution, powered by MVPArms (MVPArms 官方快速组件化方案).
Apache License 2.0
1.69k stars 243 forks source link

整体编译,报Program type already present #25

Closed LomoLin closed 5 years ago

LomoLin commented 5 years ago

在me.jessyan.armscomponent.commonres.base中,BaseLazyFragment继承BaseFragment,然后在其他业务组件(两个或两个以上的业务module)模块下去实现BaseLazyFragment,编译后出现Error: Program type already present: me.jessyan.armscomponent.commonres.base.BaseLazyFragment_MembersInjector

JessYanCoding commented 5 years ago

说明 base 已经生成了 BaseLazyFragment_MembersInjector 这个类,你的业务组件又生成了一个叫 BaseLazyFragment_MembersInjector 的类,导致冲突了,自己检查下依赖关键,Dagger 为什么会生成两个 BaseLazyFragment_MembersInjector

miaoMiaoDaShi commented 5 years ago

@LomoLin 你可以把base块生成的xxx__MembersInjector复制到base块中,应该是Dagger不知道生成时机导致的。

LomoLin commented 5 years ago

我直接在base中写了一个针对BaseLazyFragment的空实现 https://github.com/google/dagger/issues/955

jasonlee3652 commented 5 years ago

@LomoLin 我遇到了和你一样的问题,发现如果要基于arms中的BaseFragment或BaseActivity去实现一个子类,比如带标题栏或是自动分页,放在依赖于arms的模块中,如果项目有多个module,Dagger都会生成多个 BasexxxFragment_MembersInjector,从而报 Program type already present。我以为是依赖关系,尝试多次都没解决,最终用@miaoMiaoDaShi 的方案解决了,请问你的方案具体是怎样实现的?

xiaofengshen commented 5 years ago

我直接在base中写了一个针对BaseLazyFragment的空实现 这样还是存在

JessYanCoding commented 4 years ago

https://github.com/JessYanCoding/MVPArms/pull/341