私のプロジェクトでは、古いモデルクラスに AutoValue を使用しています。 Kotlinを使い始め、AutoValueの代わりに Data Classes を使用したいと思います。 Data layer内のすべてのDataクラスの難読化を無効にしたいが、パッケージ内の他のクラスを難読化し続けたい。
これを行う方法はありますか?
私のProguardファイルには次のようなものが期待されます:
-keepclassmembers data class example.data_layer.** { *; }
問題を修正するために、モデルクラスをmodel packageに移動し、パッケージに新しい ProGuard ルールを追加しました。
-keep class com.company.myfeature.model.** { *; }
別の解決策は、サポートライブラリの @ Keepアノテーション を使用して、クラスの難読化を無効にすることです。
@Keep
data class MyRequestBody(val value: String)
@ Keep を使用すると、新しいクラスに追加するのを忘れがちになるため、問題が発生する可能性があります。
うまくいけば、将来的には1つProGuardルールを使用して、すべてのDataクラスモデルクラスのサブパッケージを必要としないパッケージ内。
@Keep
アノテーションは機能しますが、もう1つのオプションは、@SerializedName
をプロパティに追加することです。
data class SomeDataClass(
@SerializedName("prop1") val PropertyOne: String,
@SerializedName("prop2") val PropertyTwo: Boolean
)
データクラス全体を維持することが良いかどうかはわかりません。しかし、それが要件である場合、以下のプロガードルールが機能します。しかし、これは単なる回避策です。自信なしに提案します。慎重に検討してください。
-keepclasseswithmembers class example.data_layer.** {
public ** component1();
<fields>;
}
詳細な説明がある記事があります: ProguardにKotlinデータクラスを保持させる方法