web-dev-qa-db-fra.com

Proguard - n'obscurcissez pas les classes de données Kotlin

Dans mon projet, j'utilise AutoValue pour mes anciennes classes de modèles. J'ai commencé à utiliser Kotlin et je veux utiliser Data Classes au lieu d'AutoValue. Je veux désactiver l'obscurcissement pour toutes les classes de données dans ma couche de données mais pour continuer à obscurcir les autres classes du package.

Y a-t-il un moyen de faire cela?

Je m'attendrais à avoir quelque chose comme ça dans mon Proguard fichier:

-keepclassmembers data class example.data_layer.** { *; }
19
Mario Kutlev

Pour résoudre le problème, j'ai déplacé les classes de modèle vers le package de modèle et ajouté une nouvelle règle ProGuard pour le package.

-keep class com.company.myfeature.model.** { *; }

Une autre solution serait d'utiliser @ Keep annotation de la bibliothèque de support pour désactiver l'obscurcissement de la classe:

@Keep
data class MyRequestBody(val value: String)

L'utilisation de @ Keep peut causer des problèmes car il est facile d'oublier de l'ajouter pour de nouvelles classes.

J'espère qu'à l'avenir il y aura un moyen avec une règle ProGuard pour désactiver l'obscurcissement pour tous Classes de données dans le package sans avoir besoin d'un sous-package pour les classes de modèles .

39
Mario Kutlev

Tandis que @Keep l'annotation fonctionne, une autre option consiste à ajouter @SerializedName aux propriétés:

data class SomeDataClass(
    @SerializedName("prop1") val PropertyOne: String, 
    @SerializedName("prop2") val PropertyTwo: Boolean
)
2
Suleyman

Je ne suis pas sûr que la conservation de toute la classe de données soit bonne ou non. mais si c'est exigé, la règle de progression ci-dessous fonctionnera. mais, c'est juste une solution de contournement. Je suggère sans confiance. veuillez considérer attentivement.

-keepclasseswithmembers class example.data_layer.** {
    public ** component1();
    <fields>;
}

J'ai un article ici avec une explication plus détaillée: Comment faire Proguard garder la classe de données Kotlin

1
jeonghyeon kim