M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

ProGuardマニュアル (3) 保全オプション

原文は、ProGuard Manual”(Eric Lafortune)です(2011年3月29日取得)。

イントロダクションと索引はこちら

******************************

保全オプション*1

-keep [,modifier,...] class_specification

処理対象のコードのエントリーポイントとして保護すべきクラスとクラス・メンバー(フィールドとメソッド)を指定します。例えば、アプリケーション(の動作)を保全するため、メインクラスとmainメソッドを指定することができます。また例えば、何らかのライブラリを処理するため、すべてのpublicアクセスの要素を指定します。

-keepclassmembers [,modifier,...] class_specification

クラスが保護対象であるとき、同様に保護すべきクラス・メンバーを指定します。例えば、Serializableインターフェースを実装したクラスのすべてのシリアライズ関連フィールドとメソッドを保全したい場合に使用します。

-keepclasseswithmembers [,modifier,...] class_specification

指定されたすべてのメンバーが存在する場合そのクラスとクラス・メンバーを保護するよう指定します。例えば、mainメソッドを持つクラスを──それらを明示的に列挙することなく──保護したいという場合があります。

-keepnames class_specification

次のオプションの短縮形です: -keep,allowshrinking class_specification

もしダウンサイジングの過程で削除されていなければ難読化過程で名前が保護されるべきクラスとクラス・メンバーを指定します。例えばSerializableインターフェースを実装するすべてのクラスについて──それらが元のシリアライズ可能なクラスと互換性を保つよう──名前を保全しておきたいという場合があります。

-keepclassmembernames class_specification

次のオプションの短縮形です: -keepclassmembers,allowshrinking class_specification

もしダウンサイジングの過程で削除されていなければ難読化過程で名前が保護されるべきクラス・メンバーを指定します。例えば、JDK 1.2以降でコンパイルされたライブラリを処理するとき、合成クラス・メソッド(訳者:コンパイラが自動生成する$記号を含む名前を持つ)の名前を保護したいことがあります。難読化機能は、この処理されたライブラリを使用するアプリケーションを処理するときも、それらの保護すべきメンバーを検出できます(このときProGuardはオプションを必要としませんが)。このオプションは難読化の過程にのみ有効です。

-keepclasseswithmembernames class_specification

次のオプションの短縮形です: -keepclasseswithmembers,allowshrinking class_specification

指定されたクラス・メンバーのすべてがダウンサイジング過程のあとにも残存していることを条件に、名前が保全されるべきクラスとクラス・メンバーを指定します。例えば、すべてのnativeメソッドのそのクラスの名前とを保全したい──これによって処理済みコードのネイティブ・コード・ライブラリとのリンクを保ちたい──という場合があります。いずれにしても一度も使用されていないnativeメソッドは削除されます。もしクラスファイルは使用されているものの、保全対象として指定されたnativeメソッドが存在しない場合、クラス名は難読化処理の対象になります。

-printseeds [filename]

種々の-keepオプションの指定対象となったクラスとクラス・メンバーの完全な一覧を返すよう指定します。この一覧は標準出力もしくはfilenameとして与えられたファイルに書き出されます。この一覧は、意図したクラス・メンバーが保護理対象として正しく検出されているかどうか──とりわけクラス・メンバーの指定にワイルドカードを使用している場合のそれ──を検証するのに使うことができます。例えば、保護対象としたすべてのアプリケーションないしアプレットをリストアップしたい、という場合があります。

******************************

ProGuardマニュアル (4)につづく。

*1:訳者:原文では“keep options”となっています。