M12i.

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

ProGuardマニュアル (2) 入力/出力オプション

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

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

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

入力/出力オプション

@filename

“-include filename”オプションの省略形です。

-include filename

ファイル名で指定されたファイルから設定情報を再帰的に読み取ります。

-basedirectory directoryname

コマンドライン・オプションやコンフィギュレーションファイルの中で、このオプションのあとに来るファイル名の、基本ディレクトリを指定できます。

-injars class_path

処理対象のアプリケーションの入力jarファイル(もしくはwar、ear、zipファイルやディレクトリ)を指定します。これらのjarファイルに含まれるクラスファイルはProGuardにより処理され、出力jarファイルとして保存されます。デフォルトでは、すべての非クラスファイルは、変更されずそのままコピーされることなります。とくにディレクトリから直にクラスファイルを読み込む場合、(IDEなどにより作成された)一時ファイルには注意してください。対象項目は、フィルターの節で解説されているように、フィルタリングできます。可読性のため、クラスパス項目を複数の-injarsオプションを使って指定することもできます。

-outjars class_path

出力するjarファイル(もしくはwar、ear、zip、ディレクトリ)を指定します。先行する-injarsオプションで指定された入力jarファイルは処理され、-outjarsで指定された名前のjarとして保存されます。入力jarファイルの各グループを、出力jarファイル側の各グループに対応させることもできます。加えて、出力項目はフィルターの節で解説している方法で、フィルタリングすることができます。個々の処理済みクラスファイルやリソースファイルは、出力jarファイルグループのなかで最初にフィルターにマッチした出力項目に書き込まれます。出力ファイルが入力ファイルを上書きするようなことが起こらないようにしてください。よりよい可読性のために、出力項目の指定は、複数の-outjarsオプションを使用して指定することができます。-outjarsオプションが指定されていない場合、出力は行われません。

-libraryjars class_path

処理対象となるアプリケーションが利用するライブラリjarファイル(もしくはwar、ear、zip、ディレクトリ)を指定します。これらのファイルは、出力jarファイルに含まれることはありません。指定するライブラリjarは、すくなくともアプリケーション側のクラスによって継承/拡張されたクラスを含んでいるものです。単にアプリケーション側のコードから呼び出されているものについては指定する必要はありません。とはいえ指定しておくと、最適化のステップでよりよい結果を期待できます。ライブラリの項目は、フィルターの節で解説されている方法で、フィルタリングできます。よりよい可読性のため、-libraryjarsオプションを使用できます。ProGuardは(訳者:処理対象のアプリケーションの)ブートパスとクラスパスを関知しません。つまり、アプリケーションが利用するランタイムjarファイルは、明示的に指定しないといけないということです。煩わしく思われるかもしれませんが、これによって利用者は、異なる実行環境にあわせたアプリケーションの処理を行うことができるようになります。例えば、利用者は適切にランタイムjarファイルを指定することで、J2SEアプリケーションと同様にJME MIDletを処理することができます。

-skipnonpubliclibraryclasses

ライブラリjarファイルを読み込む際、処理スピードの向上とメモリ使用料の削減のため、読み飛ばすべき非publicクラスを指定します。デフォルトでは、ProGuardは、非publicなクラスをpublicクラスと同様に読み込みます。しかし処理対象のプログラムコードに影響しない非publicなクラスは、たいていProGuradの処理に影響しません。これらを無視することで、処理結果のjarファイルには変わりありませんが、ProGuardの処理速度は向上します。残念ながら、JSEランタイムjarを含むいくつかのライブラリは、publicなライブラリ・クラスから拡張されている非publicなクラスを内包しています。このような場合、このオプションは利用できません。このオプションのためにクラスが見つけられなかった場合、ProGuardは警告を出力します。

-dontskipnonpubliclibraryclasses

非publicなライブラリ・クラスを無視しないよう、指定します。バージョン4.5以降、ProGuardのデフォルト設定になっています。

-dontskipnonpubliclibraryclassmembers

パッケージアクセスのライブラリ・クラス・メンバー(フィールドとメソッド)を無視しないよう指定します。デフォルトでは、ProGuardはライブラリ・クラスを読み込むとき、これらのクラス・メンバーを読み飛ばします。一般に、処理対象のプログラムからは、それらにアクセスできないからです。しかしときとして、プログラム側のクラスがライブラリのクラスと同じパッケージに属し、前者が後者のクラス・メンバーを参照する場合があります。この場合、このオプションは、処理済みコードがライブラリ・クラスとの整合性を保っていることを確証するために、パッケージ・アクセスのクラス・メンバーを実際に読み取らせるのに有益です。

-keepdirectories [directory_filter]

出力jarファイル(もしくはwar、ear、ディレクトリ)の中で、維持すべきディレクトリを指定します。デフォルトでは、ディレクトリ項目は削除されます。これはjarサイズを低減しますが、処理対象のプログラムのコードが、“MyClass.class.getResource("")”といった形式でリソースにアクセスするものである場合、ディレクトリ項目の削除は望まれないものです。もしこのオプションがフィルタなしに指定された場合、すべてのディレクトリが温存されます。フィルターとともに用いられた場合は、フィルターにマッチしたオブジェクトのみが温存されることになります。

-target version

処理済みクラス・ファイルが対応するJVMバージョンナンバーを指定します。ナンバーとしては、1.0、1.1、1.2、1.3、1.4、1.5(もしくは5)、1.6(もしくは6)を指定できます。デフォルトでは、クラスファイルのバージョンナンバーは、元どおりです。例えば、既存クラスファイルのバージョンナンバーを変更し、事前検証を行って、Java 6向けにアップグレードしたいという場合にこのオプションを使用します。

-forceprocessing

たとえ対応する出力ファイルが最新の状態であるようにみえても再度入力ファイルを処理するよう指定します。最新の状態であるかどうかの検証は、入力ファイル、出力ファイル、そして設定ファイルとディレクトリの更新日時をもとに行われます。

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

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