匕首2麻烦@注入FirebaseMessagingService

我最近尝试将我正在从GCM的应用程序迁移到FCM 。 当我这样做的时候,我发现我之前使用Dagger 2 (2.0.2)在服务内部提供了我的Retrofit API和其他用户数据pipe理器的实例(没有问题),我不能再这样做FirebaseMessagingService

每当我尝试编译与我的Dagger 2 Component接口中列出的FirebaseMessagingService的子类,我会得到一个IllegalArgumentException 。 在深入了解一些代码之后, Dagger 2试图validation一个类名并发现第一个字母不是大写字母时,似乎抛出exception。 至less在我的最后, FirebaseMessagingServiceinheritance自一个简化/缩小的代码库,其直接超类是zzbpublic class FirebaseMessagingService extends com.google.firebase.iid.zzb )。

我最好的猜测是这是罪魁祸首。 如果这真的是问题,我不知道该怎么做,现在坚持GCM 。 任何人有任何想法或类似的经验呢?

编辑:我有机会问一个Firebase开发者有关这个问题: https : //www.reddit.com/r/androiddev/comments/4upj1o/beware_of_the_new_firebase/d5tdbk3 – 没有解决scheme。 我可能只是要避免直接注入,并巩固到一个静态的API提供者。

经过半天的奋斗,终于搬到了Dagger 2.7修正了这个问题。

 compile "com.google.dagger:dagger:2.7" apt "com.google.dagger:dagger-compiler:2.7" 

我们遇到了同样的问题,Dagger对类大写的classname进行了一些愚蠢的validation,遇到了一个混淆了的类名,

 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();