2017-05-24 4 views
2

J'essaie de réduire, d'optimiser et d'obfusquer mon application avec ProGuard. Tout fonctionne bien sauf les annotations GSON. J'ai quelque chose comme ça dans ma demande:Est-il possible d'obscurcir les chaînes dans les annotations GSON lors de l'utilisation de ProGuard?

@Expose 
@SerializedName("testbla") 
private String test; 

Et quand im en utilisant ProGuard il se transforme en quelque chose comme ceci:

@com.google.a.a.a 
@c(a="testbla") 
private String a; 

Donc, il y a une sorte de faux-fuyants, mais le « testbla » est toujours lisible . J'ai lu dans la documentation que les constantes String ne sont pas obfusquées par ProGuard (par exemple, https://www.guardsquare.com/en/proguard/faq#encrypt). Néanmoins, je veux obscurcir ces cordes s'il y a une option. Donc, il y a une possibilité alors s'il vous plaît faites le moi savoir!

Merci pour votre aide!

+0

Je suppose que cela n'a pas de sens. Comment Gson sait-il comment mapper les propriétés JSON et vos champs POJO? ProGuard le fait bien. Si vous voulez vraiment les obscurcir, vous devez ré-implémenter votre propre 'ReflectiveTypeAdapterFactory'. –

+0

Je ne suis pas sûr à propos d'Android, mais dans "plain vanilla" Java, vous pouvez également créer un chargeur de classe personnalisé afin d'appliquer un décryptage pour les classes qui ont été traitées avec ProGuard. C'est vraiment facile à implémenter en Java, et probablement Android. –

Répondre

2

ProGuard n'obscurcit pas les chaînes. L'annotation Gson, il est important de s'assurer que votre classe de mappage fonctionnera correctement.

Si vous supprimez votre annotation et que vous utilisez proguard, une erreur se produira lorsque votre application aura besoin de convertir votre JSON en POJO. Parce que le code va essayer de trouver l'attribut "a" et non "test" (parce que votre code est obscurci). Pour cette raison, l'annotation Gson est importante.

Il existe d'autres options pour masquer votre code, comme DexGuard, mais ce n'est pas gratuit.

Vérifiez les différences: Link