registro gettoken getinstance firebaseinstanceidservice firebaseinstanceid fcm configurar android firebase proguard

gettoken - ¿Qué configuración de ProGuard necesito para Firebase en Android?



get token firebase android (9)

Continuando con las otras respuestas, usando Firebase 2.4.1 solo tuve que incluir lo siguiente en mi configuración de protección (YMMV):

-keep class com.firebase.** { *; } -dontwarn com.fasterxml.**

Cuando uso Firebase SDK para aplicaciones de Android, sigo recibiendo advertencias y errores como estos (en Eclipse):

Warning ... can''t find referenced class ... Warning: there were ... unresolved references to classes or interfaces ... You may need to specify additional library jars (using ''-libraryjars'') ...

Desafortunadamente, Firebase no tiene ninguna documentación oficial sobre su uso con ProGuard.

¿Qué directivas necesito para que mis aplicaciones compilen versiones con éxito con Firebase cuando se ofuscan con ProGuard?


Encontré esto en las documentaciones de Firebase:

Cuando use Firebase Realtime Database en su aplicación junto con ProGuard, debe considerar cómo se serializarán y deserializarán sus objetos modelo después de la ofuscación. Si utiliza DataSnapshot.getValue (Class) o DatabaseReference.setValue (Object) para leer y escribir datos, deberá agregar reglas al archivo proguard-rules.pro:

# Basic ProGuard rules for Firebase Android SDK 2.0.0+ -keep class com.firebase.** { *; } -keep class org.apache.** { *; } -keepnames class com.fasterxml.jackson.** { *; } -keepnames class javax.servlet.** { *; } -keepnames class org.ietf.jgss.** { *; } -dontwarn org.apache.** -dontwarn org.w3c.dom.**


La configuración para firebase 2.5.2 parece cambiada. Esto es lo que me funciona:

-keep class com.firebase.** { *; } -keep class org.apache.** { *; } -keepnames class com.shaded.fasterxml.** { *; } -keepnames class com.fasterxml.jackson.** { *; } -keepnames class javax.servlet.** { *; } -keepnames class org.ietf.jgss.** { *; } -dontwarn org.apache.** -dontwarn org.w3c.dom.**


Mi conjunto de trabajo para Firebase SDK 2.4.2 :

-keep class com.firebase.** { *; } -keepnames class com.fasterxml.jackson.** { *; } -keepnames class javax.servlet.** { *; } -keepnames class org.ietf.jgss.** { *; } -dontwarn org.w3c.dom.** -dontwarn org.joda.time.** -dontwarn org.shaded.apache.** -dontwarn org.ietf.jgss.** -dontwarn com.firebase.** -dontnote com.firebase.client.core.GaePlatform


No es realmente documentación oficial, pero Firebase mostró algunas reglas básicas de protección en uno de sus repositorios de Github. https://github.com/firebase/AndroidChat/blob/master/app/proguard-rules.pro

# Add this global rule -keepattributes Signature # This rule will properly ProGuard all the model classes in # the package com.yourcompany.models. Modify to fit the structure # of your app. -keepclassmembers class com.yourcompany.models.** { *; }


Resuelve mi problema

Agregue esto a su archivo de reglas de protección

-optimizations !class/merging/*


Según mis pruebas personales, resultó que algo así es necesario para que las aplicaciones de Android mejoradas con Firebase se compilen con ProGuard.

En cualquier caso, debe agregar la -keepnames class com.my.package.beans.** { *; } -keepnames class com.my.package.beans.** { *; } si está utilizando objetos personalizados en su Firebase, es decir, beans o POJOs.

Firebase SDK 1.0.18:

-keepnames class com.firebase.** { *; } -keepnames class com.shaded.fasterxml.jackson.** { *; } -keepnames class org.shaded.apache.** { *; } -keepnames class javax.servlet.** { *; } -dontwarn org.w3c.dom.** -dontwarn org.joda.time.** -dontwarn org.shaded.apache.commons.logging.impl.**

Firebase SDK 1.1.1:

-keep class com.firebase.** { *; } -keep class org.shaded.apache.** { *; } -keepnames class com.shaded.fasterxml.jackson.** { *; } -keepnames class javax.servlet.** { *; } -keepnames class org.ietf.jgss.** { *; } -dontwarn org.w3c.dom.** -dontwarn org.joda.time.** -dontwarn org.shaded.apache.** -dontwarn org.ietf.jgss.**

Firebase SDK 2.0.0:

-keep class com.firebase.** { *; } -keep class org.apache.** { *; } -keepnames class com.fasterxml.jackson.** { *; } -keepnames class javax.servlet.** { *; } -keepnames class org.ietf.jgss.** { *; } -dontwarn org.w3c.dom.** -dontwarn org.joda.time.** -dontwarn org.shaded.apache.** -dontwarn org.ietf.jgss.** # Only necessary if you downloaded the SDK jar directly instead of from maven. -keep class com.shaded.fasterxml.jackson.** { *; }

Último recurso:

-keep class !com.my.package.** { *; }

Notas:

Cualquier directriz oficial sería bienvenida. Las directivas -dontwarn son obviamente peligrosas, el código puede romperse en puntos que no he probado. Además, las reglas anteriores son bastante permisivas y otras reglas pueden optimizar mejor sus APK.


Si está utilizando Firebase Realtime Database, los objetos del modelo se serializarán y deserializarán después de la ofuscación. Entonces necesita tener esto en su proguard-rules.pro :

# Add this global rule -keepattributes Signature # This rule will properly ProGuard all the model classes in # the package com.yourcompany.models. Modify to fit the structure # of your app. -keepclassmembers class com.yourcompany.models.** { *; }

Más información aquí: https://firebase.google.com/docs/database/android/start


También luché con esto. Gracias a user4989692 y a Ugo por indicarme la dirección correcta.

Esto es lo que funcionó para mí:

build.gradle

buildTypes { debug { minifyEnabled false shrinkResources false useProguard false debuggable true signingConfig signingConfigs.debug } release { minifyEnabled true shrinkResources true useProguard true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' signingConfig signingConfigs.release } }

proguard-rules.pro

-dontwarn org.w3c.dom.** -dontwarn org.joda.time.** -dontwarn org.shaded.apache.** -dontwarn org.ietf.jgss.** -dontwarn com.firebase.** -dontnote com.firebase.client.core.GaePlatform -keepattributes Signature -keepattributes *Annotation* -keepattributes InnerClasses,EnclosingMethod -keep class com.YOUR-APP-DOMAIN.** { *; } # Basic ProGuard rules for Firebase Android SDK 2.0.0+ -keep class com.firebase.** { *; } -keepnames class com.fasterxml.jackson.** { *; } -keepnames class javax.servlet.** { *; } -keepnames class org.ietf.jgss.** { *; }