【问题标题】:Dagger 2 trouble @Inject-ing FirebaseMessagingServiceDagger 2 麻烦@Inject-ing FirebaseMessagingService
【发布时间】:2016-06-01 21:16:10
【问题描述】:

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

每当我尝试使用Dagger 2 Component 接口中列出的FirebaseMessagingService 的子类进行编译时,我都会得到一个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 提供程序。

【问题讨论】:

  • 能否将您的依赖项添加到问题中?
  • 我用 Dagger 2 @Inject 到一个 FirebaseMessaging 子类并且没有问题。您能否发布您的 Component 和 FirebaseMessagingService 子类的相关代码,以便我们更好地帮助您?

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


【解决方案1】:

经过半天的努力,终于迁移到 Dagger 2.7 解决了这个问题。

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

【讨论】:

  • 我确认这对我有用。从 2.0 更新到 2.7 后没有重大变化。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2010-11-11
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多