最近我将Dagger 2.13升级到2.19,但在Proguard阶段出现了以下编译错误警告。
Warning: com.mypackage.MyClass_Factory: can't find referenced method 'java.lang.Object injectMembers(dagger.MembersInjector,java.lang.Object)' in program class dagger.internal.MembersInjectors
从Dagger 2.14.1开始,这种情况也会发生。这仅发生在我包含的库中的
MyClass
上。如果我使用
-dontwarn com.mypackage.MyClass_Factory
然后它将在运行时崩溃
java.lang.NoSuchMethodError: No static method injectMembers(Ldagger/MembersInjector;Ljava/lang/Object;)Ljava/lang/Object; in class Ldagger/internal/MembersInjectors; or its super classes (declaration of 'dagger.internal.MembersInjectors' appears in MyClass
这意味着来自Proguard的警告是合法的,我应该注意它。
我搜索并发现问题已在https://github.com/google/dagger/pull/950#issuecomment-353223029中报告。
@ronshapiro的解决方案是:
您应该在其中一个(或两个)库中隐藏dagger.internal
。旧版本可能最容易
“隐藏dagger.internal”的意思是什么?怎样解决我的问题?