Magicode logo
Magicode
0

【Android】一体いつから─────難読化後の ::class.java.simpleName がユニークだと錯覚していた?

2 min read

以下のサンプル コードのように ::class.java.simpleName の値によって処理を分岐させる実装を行うと、 R8 または ProGuard による難読化後のアプリでは期待通りの挙動になりませんでした 🙅‍♀️


問題点

Qiita クラスと Zenn クラスと Magicode クラスは同一パッケージ内に配置していたのですが、難読化後の ::class.java.simpleName は重複する値に書き変わっていました。

Qiita::class.java.simpleNamed
Zenn::class.java.simpleNamef
Magicode::class.java.simpleNamef

同じパッケージ配下であれば難読化されても ::class.java.simpleName の値は被らないであろうと思い込んでいました( ::class.java.simpleName の Javadoc や中身を読めていませんでした 🙇‍♂️ )。

結論

::class.java.simpleName は使用せずに、難読化の影響を受けない文字列などの定数や、唯一無二を担保できる EnumSealed classes を条件分岐に用いる方が無難ではないかと斯様に思いました。

関連記事


Discussion

コメントにはログインが必要です。