Leakcanary se bloquea con Firebase de Google

Al procesar una fuga, obtengo una java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. Dentro de mi Application.onCreate . Por lo que entiendo, esto ocurre porque LeakCanary crea mi clase de aplicación sin todos los servicios de Google Play y Firebase no puede inicializarse correctamente. Alguna idea de cómo solucionar este problema?

Edit: Estoy usando leakcanary-android:1.4-beta2 y esto sucede después de descargar el montón.

También puede dejar la configuración de plugin de Google Play Services como lo sugiere la documentación.

Deshabilite FirebaseInitProvider agregando esto a AndroidManifest.xml

 <provider android:name="com.google.firebase.provider.FirebaseInitProvider" android:enabled="false" /> 

Y agrega esto a tu clase de aplicación

 FirebaseOptions options = FirebaseOptions.fromResource(this); FirebaseApp.initializeApp(this, options); 

De esta manera usted no tiene que configurar FirebaseOptions a mano.

Creo que encontré una solución. En lugar de utilizar el complemento Google Play Services y google-services.json , puedes configurar e inicializar Firebase tú mismo en Application.onCreate o en cualquier lugar.

 @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); } 

Encontrar las llaves era un poco un misterio. Dentro de google-services.json necesitará la url de la base de datos, que es project_info.firebase_url . Si tiene más de una aplicación que utiliza el repositorio de Firebase, habrá varios objetos de client aquí.

Si utilizas el inicio de sesión de Google, el ID de oauth está dentro del client[app].oauth_client[1].client_id . Usted puede calcular hacia fuera su client según el nombre del paquete y el oauth_client era el segundo objeto que parecía esto:

 { "client_id": "asfagasdgdas", "client_type": 3 } 

La clave api es client[app].api_key , de nuevo encontrar el cliente basado en su paquete.

Perdona el pseudo-json.

La estructura podría cambiar más tarde, esto fue escrito para Play Services versión 9.0.1.

  • SharedElement y Custom EnterTransition provoca pérdida de memoria
  • ¿Por qué se trata de una pérdida de memoria
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.