Dagger 2麻烦@Injecting-FirebaseMessagingService

时间:2016-06-01 21:16:11

标签: java android firebase google-cloud-messaging dagger-2

我最近尝试将我正在处理的应用程序从GCM迁移到FCM。在这样做的同时,我发现我以前一直使用Dagger 2 (2.0.2)来提供我的Retrofit API和服务中的其他用户数据管理器的实例(没有问题),我不能对FirebaseMessagingService这样做的时间更长。

每当我尝试使用FirebaseMessagingService界面中列出的Dagger 2 Component子类进行编译时,我都会得到IllegalArgumentException。在挖掘了一些代码之后,当Dagger 2尝试验证类名并发现第一个字母不是大写时,似乎抛出了异常。 FirebaseMessagingService,至少在我看来,继承自一个丑化/缩小的代码库,它的直接超类是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 - 无解决方案。我可能只是避免直接注入并合并到静态API提供商。

2 个答案:

答案 0 :(得分:7)

经过半天的奋斗,终于转向Dagger 2.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();