java - Google Firebase 和 Dagger-2 无法工作

标签 java android firebase dagger-2 firebase-crash-reporting

我想使用 Dagger2 和 Firebase。 不幸的是我收到以下错误消息:

background_crash E/FA: Task exception on worker thread: java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.
W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.

如果我不使用 Dagger2,一切都会正常。 这里出了什么问题?我必须手动初始化 FirebaseApp 吗?谢谢! 这是我的代码:

// App extends Application
@Override
public void onCreate() {
    super.onCreate();
    appComponent = DaggerAppComponent
            .builder()
            .appModule(new AppModule(this))
            .build();
    firebaseAnalytics = FirebaseAnalytics.getInstance(this);
}

...

// AppComponent.class
@Provides
@Singleton
public FirebaseAuth provideFirebaseAuth() {
    return FirebaseAuth.getInstance();
}

...

@ActivityScope
@Component(dependencies = AppComponent.class)
public interface SignupComponent {
    void inject(SignupActivity signupActivity);
}

...

@Inject
public FirebaseAuth firebaseAuth;

private SignupComponent signupComponent;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    ButterKnife.bind(this);
    signupComponent = DaggerSignupComponent
            .builder()
            .appComponent(((App)getApplication()).getAppComponent())
            .build();
    signupComponent.inject(this);
}

@OnClick(R.id.sign_up_btn_sign_up)
public void clickOnSignUp() {
    String email = emailInput.getText().toString();
    String pass = passwordInput.getText().toString();

    if (!TextUtils.isEmpty(email) && !TextUtils.isEmpty(pass)) {
        progressBar.setVisibility(View.VISIBLE);
        firebaseAuth.createUserWithEmailAndPassword(email, pass)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        progressBar.setVisibility(View.GONE);
                        if (task.isSuccessful()) {
                            Toast.makeText(SignupActivity.this, "yeppppa", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
}

Aaa 和我的构建文件

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.1.1'
    compile 'com.android.support:design:24.1.1'
    compile 'com.android.support:cardview-v7:24.1.1'
    compile 'com.android.support:recyclerview-v7:24.1.1'

    compile 'com.google.firebase:firebase-core:9.4.0'
    compile 'com.google.firebase:firebase-database:9.4.0'
    compile 'com.google.firebase:firebase-storage:9.4.0'
    compile 'com.google.firebase:firebase-crash:9.4.0'
    compile 'com.google.firebase:firebase-auth:9.4.0'

    compile 'com.google.dagger:dagger:2.6'
    apt 'com.google.dagger:dagger-compiler:2.6'

    compile 'com.jakewharton:butterknife:8.2.1'
    apt 'com.jakewharton:butterknife-compiler:8.2.1'
}

apply plugin: 'com.google.gms.google-services'

最佳答案

这其实和Dagger没有任何关系。它与 Firebase 崩溃报告的已知问题以及使用应用程序子类有关,该子类处理最终在主进程和崩溃报告创建的进程之间共享的文件或其他资源。 Android 为应用程序使用的每个进程创建一个新的 Application 类这一点并不经常被讨论,在您的例子中,您实际上有两个相互冲突的 Dagger 图。

阅读本页末尾的已知问题: https://firebase.google.com/docs/crash/android

最简单的解决方案是删除 firebase-crash 依赖项,或者将初始化逻辑移至内容提供程序而不是应用程序中。无论如何,Android 平台团队通常都不赞成使用应用程序。

您还可以等到 Firebase 崩溃报告退出测试版,届时它将不再创建新进程。

关于java - Google Firebase 和 Dagger-2 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38897115/

相关文章:

Android - 找不到 SwipeRefreshLayout 导入

java - 如何拦截url文件并附加到邮件

java - 在 Scala 中,为什么余数 (%) 运算符会返回负数?

java - 计算作为数字因子的两个数组的元素

android - 测试购买未显示在 Google 电子钱包商家中

android - RecyclerView 不显示来自 firebase 的数据(Kotlin)

java - 当Solr中文档大小大于内存时?

android - 在 Android 上,在不使用 UrlEncodedFormEntity 的情况下使用 URL 编码表单数据发出 POST 请求

ios - 单击警报按钮不起作用时更改 View

firebase - 从第二屏返回后 flutter 刷新 map