我最近尝试将我正在处理的应用程序从GCM
迁移到FCM
。在这样做的同时,我发现我以前一直使用Dagger 2 (2.0.2)
来提供我的Retrofit
API和服务中的其他用户数据管理器的实例(没有问题),我不能对FirebaseMessagingService
这样做的时间更长。
每当我尝试使用FirebaseMessagingService
界面中列出的Dagger 2 Component
子类进行编译时,我都会得到IllegalArgumentException
。在挖掘了一些代码之后,当Dagger 2
尝试验证类名并发现第一个字母不是大写时,似乎抛出了异常。 FirebaseMessagingService
,至少在我看来,继承自一个丑化/缩小的代码库,它的直接超类是zzb
(public class FirebaseMessagingService extends com.google.firebase.iid.zzb
)。
我最好的猜测是,这是罪魁祸首。如果这确实是问题,我现在不知道如何处理这个问题,除了坚持GCM
。任何人对此都有任何想法或类似经历吗?
编辑:我有机会向Firebase开发人员询问此问题:https://www.reddit.com/r/androiddev/comments/4upj1o/beware_of_the_new_firebase/d5tdbk3 - 无解决方案。我可能只是避免直接注入并合并到静态API提供商。
答案 0 :(得分:7)
compile "com.google.dagger:dagger:2.7"
apt "com.google.dagger:dagger-compiler:2.7"
答案 1 :(得分:0)
我们遇到了同样的问题,Dagger对类大写的classname做了一些愚蠢的验证,遇到了一个混淆的类名,实际上看起来像是
public class FirebaseService extends xxab {
}
( xxab 只是proguard在混淆传递中吐出的随机名称,我记得确切)
我们做了愚蠢的解决方法,不优雅,但工作:
public class FirebaseServiceProvider { //not real provider, though
public FirebaseServiceProvider(...params){
mInstance = ...
}
public FirebaseService getService(){
return mInstance;
}
}
在@Module
:
@Singleton
@Provides
public FirebaseServiceProvider providesFirebaseServiceProvider(){
return new FirebaseServiceProvider(.....);
}
注射:
@Inject
FirebaseServiceProvider mFirebaseServiceProvider;
用法:
mFirebaseServiceProvider.getService().doStuff();