jargは、Javaクラスファイルを格納しているJARファイルをより小さくします。(To English)
○2003/01/29 : 0.9.14版 リリース
0.9.14 - 2003/01/29 - 2002/12/01 +1. NEW : 未使用のクラスを削除可能にしました。 +2. NEW : 未使用のインターフェースを削除可能にしました。 +3. FIX : if文でor式を使用しかつそのメソッドが値を返さない場合、 不適切なバイトコードを生成してしまう不具合を修正しました。 (この不具合が発生すると正常に動作しなくなります。)
jargはJavaクラスファイルが格納されているJARファイルのサイズを削減します。 「簡単にサイズ削減できること」が第1目標ですが、jargで処理した結果、 Javaクラスファイルは最適化されるのでより速くなりますし、改名されるのでより解析されにくくなります。 つまり、jargは、'Java Optimizer'であり、'Java Obfuscator'であり、'Java Shrinker'もしくは'Java Reducer'でもあります。
最後に、jargは、100% Pure Javaですし、オープンソースですし、無料でご利用いただけます。
jargはJARファイルからクラスファイルを読込み、読み込んだクラスファイルを解析し、以下の処理を施して、圧縮JARファイルを出力します。
jargを使用すると以下の効果があります。
jargを実行するには、Java2互換のJVMが必要です。その他に必要なものはありません。 私の開発環境は、jdk1.3.1_02/win2000 なので、それ以外では動作確認できていませんが、問題ないと思います。
動作報告:iアプリ(DoJa1.0 2.0), Javaアプリ(J-PhoneのMIDP), ezplus(auのMIDP)で、動作できているようです。
> Thanks : potaka
このソフトウェアjargは、無保証、無料にて自由にご利用いただけます。 このソフトウェアjargは、オープンソースで、sourceforgeのcvsサーバより自由にソースコードを閲覧いただけます。
このソフトウェアは、Javaクラスファイルの操作用に、BCEL - The Byte Code Engineering Library(JavaClass)を利用しています。
このソフトウェアを使用して、このソフトウェアの不具合や問題点を発見した場合、 著者:Hidetoshi Ohuchi <hchacha@users.sourceforge.net>までご連絡頂けると幸いです。
ここsourceforgeよりダウンロードしてください。 中段あたりに最新バージョンが表示されています。
ダウンロードしたら、それを好きなディレクトリーで解凍(unzip)してください。 設置はそれだけです。環境変数の設定など、他に必要なことは何もありません。
jargで処理したいJARファイルのあるディレクトリに移動してください。 あとは、コマンドラインで以下のように使用するだけです。
> java -jar jarg.jar abc.jar
abc.jarの所に、jargで処理したいあなたのJARファイルを指定します。 しばらくすると、abc.jarと同じ場所に、abc_s.jarが作成されます。 このabc_s.jarがjargで処理されより小さくなったJARファイルです。
まだ、バグがあるかもしれませんので、abc_s.jarを実行して不具合がないことを十分に確認してください。
以下のようにすると、コマンドラインヘルプが表示されます。
> java -jar jarg.jar jarg - Java Archive Grinder (jarg) - ver 0.9.12 [usage] java -jar jarg.jar {options} xxxx.jar options -version : show version バージョンを表示します。 -verbose : verbose mode -verbosern : verbose of renaming -verboseufm : verbose of removing unused fields and methods -verbosebco : verbose of byte-code optimizing -verboseall : verbose all -showstat : show statistics -showtime : show time -nocomp : no commpressed output jar 非圧縮形式のJARファイルを出力します。 -normdir : no remove directry entry ディレクトリエントリを削除しません。 -normlv : no remove local variable ローカル変数のデバッグ情報を削除しません。 -normln : no remove line number 行番号のデバッグ情報を削除しません。 -normsf : no remove source file ソースファイル名を削除しません。 -normsy : no remove 'Synthetic' 'Synthetic'属性を削除しません。 -normin : no remove 'InnerClasses' 'InnerClasses'属性を削除しません。 -normex : no remove 'Exceptions' 'Exceptions'属性を削除しません。 -nornc : no rename class クラス名を変更しません。 -nornf : no rename field フィールド名を変更しません。 -nornm : no rename method メソッド名を変更しません。 -nobco : no byte-code optimizing バイトコード最適化を行いません。 -excpp @file : list of excepting package -excpc @file : list of excepting class -excpf @file : list of excepting field -excpm @file : list of excepting method -rnlog file : rename log file 改名ログを出力するファイル名を指定します。 -j2me-prev preverify : preverify command path -j2me-cp classpath : preverify class path
クラス名の変更をしたくない場合には、以下のようにします。
> java -jar jarg.jar -nornc abc.jar
ある特定のクラス名を変更したくない場合には、変更したくないクラス名をパッケージ名を含めてテキストファイルに入れます。 複数ある場合には、1行に1つのクラス名になるように、おのおのを改行で区切ります。 そして、以下のようにします。ここで exclass.txt は、前述のテキストファイルの名前です。
> java -jar jarg.jar -excpc @exclass.txt abc.jar
J2ME-MIDLET用のjarファイルの場合、preverifyを再度行う必要がありますので、以下のようにしてください。
> java -jar jarg.jar -j2me-prev c:\j2mewtk\bin\preverify.exe -j2me-cp c:\j2mewtk\lib\midpapi.zip abc.jar
Ant Taskに対応していますので、Antビルドファイルで、直接利用できます。(サンプル & オプション)
変更履歴は、ここをご覧ください。