Question
こんなdataクラスがあったとします。
@Keep
data class HogeResponse(
val result: Result,
) {
data class Result(
val hoge: Boolean,
)
}
親クラスのHogeResponse
の方には@Keep
があるので、難読化されなそう。
しかし、ネストされたResult
の方には@Keep
が付いていません。
この場合、Result
クラスは難読化されるでしょうか?
結論
難読化されてしまいます。
ネストされたクラスには親クラスの@Keep
が反映されません。
実験
Result
に@Keep
がある or なしで生成したapkに差分があるかを確認します。
AndroidStudioのBuildタブ > Analyze APKもしくはツリーの中から直接apkファイルを開くと確認できました。
@Keep
ありの場合は、HogeResponse$Result
のツリーがあることと、HogeResonse
内でもResult
クラスを確認できるため、難読化されていないことがわかります。
対して@Keep
なしの場合は、HogeResponse$Result
のツリーがないことと、HogeResonse
内でもResult
クラスが確認できません。難読化によって、M0.d
に変換されているようでした。
まとめ
親クラスに@Keep
つけてる場合は、ネストされたクラスにも@Keep
つけようね。
補足:ChatGPTにも聞いてみた
とのこと。見解一致です。めでたしめでたし👏