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