Leakcanary与Google的Firebase崩溃

Dar*_*usL 5 android firebase leakcanary

在处理泄漏时,我得到了一个java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.内部Application.onCreate.根据我的理解,这是因为LeakCanary创建了我的应用程序类而没有所有Google Play服务,Firebase无法成功初始化.任何想法如何解决这一问题?

编辑:我正在使用leakcanary-android:1.4-beta2,这是在转储堆后发生的.

Dar*_*usL 0

我相信我找到了解决方法。google-services.json您可以在其中或任何地方自行配置和初始化 Firebase,而不是使用 Google Play 服务插件Application.onCreate

@Provides
@Singleton
protected FirebaseApp proviceFirebaseApp(Application application) {
    FirebaseOptions options = new FirebaseOptions.Builder()
            .setApplicationId(application.getPackageName())
            .setDatabaseUrl(BuildConfig.FIREBASE_DATABASE_URL)
            .setApiKey(BuildConfig.FIREBASE_API_KEY)
            .build();
    return FirebaseApp.initializeApp(application, options);
}
Run Code Online (Sandbox Code Playgroud)

寻找钥匙有点神秘。在里面google-services.json你需要数据库 url,即project_info.firebase_url. 如果您有多个应用程序使用 Firebase 存储库,则client此处将会有多个对象。

如果您使用 Google Sign In,则 oauth id 位于 内client[app].oauth_client[1].client_idclient您可以根据包名称找出您的包,这oauth_client是第二个对象,如下所示:

{
  "client_id": "asfagasdgdas",
  "client_type": 3
}
Run Code Online (Sandbox Code Playgroud)

api key 是client[app].api_key,再次根据你的包找到客户端。

原谅伪 json。

该结构稍后可能会更改,这是为 Play Services 版本 9.0.1 编写的。