ProGuardで-keepオプションのメモ
ProGuardでは、-keepオプションで指定したクラス・メソッドなどをそのProGuradの処理対象から外します。-keepオプションがいろいろあってよくわからなかったのでまとめてみた。
keepするもの(対象外とするもの) | リネームと削除をしない | リネームをしない*1 |
クラスとクラスメンバ | -keep | -keepnames |
クラスメンバのみ | -keepclassmembers | -keepclassmembernames |
クラスメンバが存在した場合のクラスとクラスメンバ | -keepclasseswithmembers | -keepclasseswithmembernames |
使い方を理解しきってない場合は-keepを使えば間違いない模様。圧縮段階で削除されず、難読化段階でリネームされないため。
注意事項
- クラスメンバなしでクラスのみを指定すると、エントリポイントとしてクラスを保存します(全てのクラスメンバは削除、最適化、難読化された状態)。
- クラスメンバだけ指定するとクラスメンバがエントリポイントとして保存される(全ての関連するコードは最適化され適用されたまま)
keepオプションと一緒に使うオプション
こんな感じで使う。
-keep,allowshrinking xxxxx
- allowshrinking
保護対象であっても、-keepオプションで指定されたエントリポイントを圧縮する。エントリポイントは圧縮過程で削除されるかもしれないが、最適化・難読化されない。
- allowoptimization
保護対象であっても、-keepオプションで指定されたエントリポイントを最適化する。エントリポイントは最適化過程で変更されるかもしれないが、削除されたり難読化されない。(特別な用途用)
- allowobfuscation
保護対象であっても、-keepオプションで指定されたエントリポイントを難読化する。エントリポイントは難読化過程でリネームされるが削除されたり最適化されない。(特別な用途用)
*1:左側のオプションにallowshrinkingをつけたのと一緒