web-dev-qa-db-fra.com

De quelle configuration ProGuard ai-je besoin pour Firebase sous Android?

Lorsque j'utilise les applications Firebase SDK pour Android, des avertissements et des erreurs semblables à celles-ci (dans Eclipse) continuent de apparaître:

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') ...

Malheureusement, Firebase ne dispose pas de documentation officielle sur son utilisation avec ProGuard.

Quelles directives ai-je besoin pour que mes applications puissent compiler avec succès des éditions avec Firebase lorsqu'elles sont masquées avec ProGuard?

34
caw

D'après mes tests personnels, il s'est avéré que quelque chose dans ce sens était nécessaire pour que les applications Android améliorées par Firebase puissent être compilées avec ProGuard.

Dans tous les cas, vous devez ajouter -keepnames class com.my.package.beans.** { *; } si vous utilisez des objets personnalisés dans votre Firebase, c’est-à-dire des beans ou des POJO.

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.** { *; }

Dernier recours:

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

Remarques:

Toute directive officielle serait la bienvenue. Les directives -dontwarn sont évidemment dangereuses, le code peut casser à des points que je n’ai pas testés. En outre, les règles ci-dessus sont assez permissives et d’autres règles peuvent mieux optimiser vos fichiers APK.

39
caw

Ce n'est pas vraiment une documentation officielle, mais Firebase a montré quelques règles de base de proguard dans l'un de leurs référentiels Github. https://github.com/firebase/AndroidChat/blob/master/app/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.**
8
user4989692

J'ai trouvé ceci dans les documentations Firebase:

Lorsque vous utilisez la base de données en temps réel Firebase dans votre application avec ProGuard, vous devez tenir compte de la façon dont vos objets de modèle seront sérialisés et désérialisés après l’obscurcissement. Si vous utilisez DataSnapshot.getValue (Class) ou DatabaseReference.setValue (Object) pour lire et écrire des données, vous devez ajouter des règles au fichier 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.** {
*;
}
6
MrAliB

La configuration de Firebase 2.5.2 semble modifiée. C'est ce qui fonctionne pour moi:

-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.**
2
Ugo Chirico

Pour faire suite aux autres réponses, en utilisant Firebase 2.4.1, je n’avais qu’à inclure les éléments suivants dans ma configuration de proguard (YMMV):

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

Mon ensemble de travail pour 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
2
Peter

J'ai également eu du mal avec cette . Merci à user4989692 et à Ugo de m'avoir orienté dans la bonne direction.

Voici ce qui a fonctionné pour moi:

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.** { *; }
1
Lee Hounshell

Ça résout mon problème

Ajoutez ceci à votre fichier proguard-rules

-optimizations !class/merging/*
0
Masum