携帯Javaアプリ最適化


携帯Javaアプリ(iアプリ)のファイルサイズの最適化を行うための情報を紹介します。

私の調べたところ、フリーのソフトの組み合わせではproguardJoGa7zipの組み合わせが最も小さくなります。

商用ではSophiaCompressが圧倒的なのかと思います。クラスを統合するってだけ聞いてもその凄さが分かるかと思います。他でやってるのみたことない。あれば教えてください。実機での動作は確認していませんがpreverifer通って、エミュレータで動いています。7zipは注意が必要とSophiaCompress?のプログラムが出力していたので、実機により動かないものがあるということなのでしょう。

  • JavaBlenderもクラス結合してくれますが、残念ながらすでにメンテナンスされていないのと、コードによっては正しく解釈してくれないケースがありました。 -- mi? 2005-07-19 08:50:20 (火)
  • http://cgi.cyborg.ne.jp/~j-saito/cgi-bin/software/ciac/ このソフトもクラス統合してくれます。 -- 2005-11-12 12:21:16 (土)
  • ProGuard?をWindows上で利用する場合は、 -dontusemixedcaseclassnames を指定した方がよろしいです。自作アプリのクラスの数が26個を超えると上書きされる不都合が生じますので、このオプションを指定することで回避できます。 -- 【なかま】? 2007-03-04 12:08:03 (日)

圧縮結果

normaltetris.jar8,299bytes
pro2.1 JoGa? 7ziptetris.jar6,968bytes
pro3.0.1 7ziptetris.jar6,905bytes
pro3.0.1 JoGa? 7ziptetris.jar6,888bytes
SophiaCompress?(7zipあり)tetris.jar5,356bytes

ダウンロード

  • proguard 現在フリーでは最も有名なオプティマイザ
  • JoGa バイトコードを相当いじるオプティマイザ。内部では現在非公開のjoptを利用しているようだ
  • 7Zip 通常のzip圧縮よりも圧縮率の良いツール
  • SophiaCompress

設定

7Zipにパスを設定する。

PATH=%PATH%;"C:\Program Files\7-Zip"

として、

>7z

とコマンドラインから実行できるようにする。

インストール

圧縮したいjarファイルのあるディレクトリに proguard.jar、JoGa?.Jar、pro.txt、pack.batを用意します。 pro.txt、pack.batのtetrisを圧縮したいJarファイルの名前に書き換えます。

実行方法

コマンドラインから

pack

と実行します。 JoGa?が立ち上がるので、実行ボタン[>]を押します。 ダイアログが表示されるのでAPIをチェックして了解を押します。 NOを押します。 了解を押します。 アプリケーションを終了させます。


proguard用設定ファイル

pro.txt

-injars tetris.jar
-libraryjars ..\..\..\lib\classes.zip
-libraryjars ..\..\..\lib\doja_classes.zip
-outjars proout.jar
-keep public class tetris.Tetris

圧縮バッチファイル

pack.bat

set DT=tetris

REM PROGUARD
java -jar proguard.jar @pro.txt
move /Y proout.jar %DT%.jar

REM JOGA
java -jar joga.jar C:\dev\iDKDoJa3.0\apps\%DT%\bin\%DT%.jar
move /Y JoGaDIR\%DT%_JOGA.jar %DT%.jar
rmdir JoGaDIR
 
REM PREVERIFY
..\..\..\bin\preverify -classpath ..\..\..\lib\classes.zip;..\..\..\lib\doja_classes.zip %DT%.jar
move /Y output\%DT%.jar .

REM 7Zip
mkdir output
cd output
jar xvf ..\%DT%.jar
del ..\%DT%.jar
7z u -tzip -mx=9 ..\%DT%.jar * %DT%\*
cd ..
rmdir /S /Q output

研究中

その他のオプティマイザを研究中です。

REM RETROGUARD 未完成
REM java -classpath .;retroguard.jar;C:\dev\iDKDoJa3.0\lib\classes.zip;
C:\dev\iDKDoJa3.0\lib\doja_classes.zip RetroGuard %DT%.jar output.jar
script.rgs retroguard.log
REM move /Y output.jar %DT%.jar

REM JARG
REM java -jar jarg.jar -nobco
-j2me-prev C:\dev\iDKDoJa3.0\bin\preverify.exe
-j2me-cp "C:\dev\iDKDoJa3.0\lib\classes.zip;C:\dev\iDKDoJa3.0\lib\doja_classes.zip" %DT%.jar

*MenuBar

人気の10件

  • counter: 6996
  • today: 1
  • yesterday: 0
  • online: 1