web-dev-qa-db-ja.com

Proguard-Kotlinデータクラスを難読化しない

私のプロジェクトでは、古いモデルクラスに AutoValue を使用しています。 Kotlinを使い始め、AutoValueの代わりに Data Classes を使用したいと思います。 Data layer内のすべてのDataクラスの難読化を無効にしたいが、パッケージ内の他のクラスを難読化し続けたい。

これを行う方法はありますか?

私のProguardファイルには次のようなものが期待されます:

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

問題を修正するために、モデルクラスをmodel packageに移動し、パッケージに新しい ProGuard ルールを追加しました。

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

別の解決策は、サポートライブラリの @ Keepアノテーション を使用して、クラスの難読化を無効にすることです。

@Keep
data class MyRequestBody(val value: String)

@ Keep を使用すると、新しいクラスに追加するのを忘れがちになるため、問題が発生する可能性があります。

うまくいけば、将来的には1つProGuardルールを使用して、すべてのDataクラスモデルクラスのサブパッケージを必要としないパッケージ内。

39
Mario Kutlev

@Keepアノテーションは機能しますが、もう1つのオプションは、@SerializedNameをプロパティに追加することです。

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

データクラス全体を維持することが良いかどうかはわかりません。しかし、それが要件である場合、以下のプロガードルールが機能します。しかし、これは単なる回避策です。自信なしに提案します。慎重に検討してください。

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

詳細な説明がある記事があります: ProguardにKotlinデータクラスを保持させる方法

1
jeonghyeon kim