2017-02-21 1 views
1

Je travaille sur une application qui utilise actuellement google gson 1.7.1 lib. Tout fonctionne bien, mais je voulais le mettre à jour avec la dernière version. J'ai essayé de le mettre à jour en 2.4 et sur la variante de débogage de l'application, cela fonctionne bien.Google Gson 2.4 minifyActiver le vrai numéro

J'ai récemment essayé d'exécuter l'application sur la version de version et soudainement le mécanisme d'analyse JSON ne fonctionne pas. Rétablir le gson lib à 1.7.1 résout le problème, mais je voudrais toujours l'avoir mis à jour à la dernière version. Ce que j'ai remarqué, c'est que si je mets minifyEnabled à false sur la version, je commence à récupérer des données (le mécanisme d'analyse fonctionne).

Quelqu'un sait-il un problème concernant minifyEnabled true et la dernière version de gson lib?

Dans mes fichiers ProGuard-règles que je les éléments suivants liés à la gson lib:

-keepclassmembers class com.myapp.data.beans.json.** { 
    private <fields>; 
} 
-keep class sun.misc.Unsafe { *; } 
-keep class com.myapp.ui.views.** { *; } 
-keepattributes Signature 
-keepattributes *Annotation* 

J'ai aussi essayé d'ajouter

-keep class * implements com.google.gson.TypeAdapterFactory 
-keep class * implements com.google.gson.JsonSerializer 
-keep class * implements com.google.gson.JsonDeserializer 

comme par échantillon Google Gson fichier config mais il n'a pas faire une différence.

Répondre

0

Vous devez indiquer à proguard de conserver les classes (champs et méthodes) et qui seront sérialisées/désérialisées sur GSON.

Par exemple, si vous avez tous vos modèles dans le package com.google.gson.examples.android.model, vous devez ajouter la règle suivante à Proguard

-keep class com.google.gson.examples.android.model.** { *; } 

Jetez un oeil à this Gson proguard official example, et essayer d'utiliser ces règles dans votre projet.

+0

je l'ai déjà faire avec '-keepclassmembers classe com.myapp.data.beans.json ** { privé . } ' Je garde également les classes liées (mais j'ai oublié de les ajouter dans la publication initiale) –

+0

essayez d'élargir la règle. La règle que j'ai affichée dans la réponse est la plus large, alors j'essaierai et je l'affinerai si ça marche. Par exemple, êtes-vous sûr que tous les champs des beans sont privés? Essayez de supprimer 'private' de la règle proguard. –

+0

Okay. Comme je l'ai dit dans mon commentaire précédent, je garde déjà les classes modèles pour le processus de désérialisation. J'ai également supprimé la règle 'private '. Aussi, oui je suis sûr que tous mes champs sont privés - d'où la règle. '-keep class com.myapp.data.beans. ** -keepclassmembers classe com.myapp.data.beans. ** {*; } ' Ne fonctionne toujours pas. En outre, si la configuration de proguard aurait été erronée, le processus de désérialisation n'aurait pas fonctionné avec la version 1.7.1 de la bibliothèque. –