Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Dagger 2在注入FirebaseMessagingService时出现故障_Java_Android_Firebase_Google Cloud Messaging_Dagger 2 - Fatal编程技术网

Java Dagger 2在注入FirebaseMessagingService时出现故障

Java Dagger 2在注入FirebaseMessagingService时出现故障,java,android,firebase,google-cloud-messaging,dagger-2,Java,Android,Firebase,Google Cloud Messaging,Dagger 2,我最近尝试将我正在处理的应用程序从GCM迁移到FCM。在这样做的时候,我发现我以前使用dagger2(2.0.2)来提供我的改进的API实例和服务内部的其他用户数据管理器(没有问题),我无法再为FirebaseMessagingService这样做了 每当我试图使用Dagger 2组件接口中列出的FirebaseMessagingService子类进行编译时,我都会得到一个IllegalArgumentException。在深入研究一些代码之后,当Dagger 2尝试验证类名并发现第一个字母不是

我最近尝试将我正在处理的应用程序从
GCM
迁移到
FCM
。在这样做的时候,我发现我以前使用
dagger2(2.0.2)
来提供我的
改进的
API实例和服务内部的其他用户数据管理器(没有问题),我无法再为
FirebaseMessagingService
这样做了

每当我试图使用
Dagger 2组件
接口中列出的
FirebaseMessagingService
子类进行编译时,我都会得到一个
IllegalArgumentException
。在深入研究一些代码之后,当
Dagger 2
尝试验证类名并发现第一个字母不是大写字母时,似乎抛出了异常
FirebaseMessagingService
,至少在我看来,是从一个丑陋的/小型的代码库继承而来的,它的直接超类是
zzb
公共类FirebaseMessagingService扩展了com.google.firebase.iid.zzb

我猜这就是罪魁祸首。如果这真的是问题所在,我不知道除了现在坚持使用
GCM
之外,该怎么办。有人对此有什么想法或类似的经验吗


EDIT:我有机会向一位Firebase开发人员询问这个问题:-没有解决方案。我可能只是想避免直接注入,并整合到一个静态API提供者。

经过半天的努力,最终转向Dagger 2.7解决了这个问题

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

我们也遇到了同样的问题,Dagger对类大写的类名进行了一些愚蠢的验证,并遇到了一个模糊的类名,它实际上看起来像

public class FirebaseService extends xxab {   

}
xxab只是proguard在混淆过程中吐出的随机名称,我能记住确切的名称)

我们做了愚蠢的变通,不优雅,但工作:

public class FirebaseServiceProvider { //not real provider, though
   public FirebaseServiceProvider(...params){
      mInstance = ...
   }
  public FirebaseService getService(){
   return mInstance;
  }
}
@模块中

@Singleton
@Provides
public FirebaseServiceProvider providesFirebaseServiceProvider(){    
 return new FirebaseServiceProvider(.....);
}
注射:

@Inject
FirebaseServiceProvider mFirebaseServiceProvider;
用法:

mFirebaseServiceProvider.getService().doStuff();

你能把你的依赖项添加到这个问题中吗?我@Inject使用Dagger 2注入FirebaseMessaging子类,没有问题。您能否发布组件和FirebaseMessagingService子类的相关代码,以便我们能更好地帮助您?我确认这对我有效。从2.0更新到2.7后没有中断更改。