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ビルドファイルで、直接利用できます。(サンプル & オプション)
変更履歴は、ここをご覧ください。