iappli: DoJa で SVG ビューアを動かす

TinyLine SVG
http://www.tinyline.com/svgt/

CLDC 準拠の SVG Tiny 表示ライブラリ。これを DoJa に移植してみた。
ドキュメントに載っている一番最初の例を元にしてやってみたところ、あっさり動作成功。

実機 (SH901iC) でも動作し、起動してから 2 秒程度で画像が表示された。

以下は、その時の作業記録。

TinyLine SVG の使い方

CLDC 準拠ということからわかるとおり、TinyLine SVG 自体には画面への表示機能がない。SVG ファイルを読ませるとデータを int 配列として戻してくるので、それを使って Canvas へ表示する部分は自分で記述する必要がある。とはいっても、Graphics クラスの setRGBPixels メソッドに渡すだけ。
まずは表示できることを確認したいので、とりあえず操作に関係するところはバッサリ削除したが、この時点で jar が 125KB もある。そもそも TinyLine SVG のライブラリ自体が 104KB あるので、このままでは実機で動かせない。

jar サイズの減らし方

TinyLine SVG は無償で使えるが、ソースは提供されておらず、変更も認められていない。そこで、あまり気が進まないが、オブファスケータと 7zip を使ってみることにした。
今回試したのは、下記のサイトで紹介されていた、ProGuard + JoGa + 7zip の組み合わせ。

sakurai wiki - 携帯Javaアプリ最適化
http://www.wikiroom.com/sakurai/index.php?%B7%C8%C2%D3Java%A5%A2%A5%D7%A5%EA%BA%C7%C5%AC%B2%BD

載っているバッチと設定ファイルを持ってきて、自分の環境に合わせてパスを書き換えた。実行してみると、なんと 88KB に! やった! と思ったのだが、いざ実機に入れてみると、起動時にエラーが発生して動作しない。
いろいろ見直してみたところ、ProGuard の設定に追加が必要なことがわかった。

-dontusemixedcaseclassnames
-dontoptimize

ProGuard は、クラス名を短縮する際に a というクラスと A というクラスを同時に生成することがある。ところが Windows 環境では、通常、ファイル名の大文字と小文字が区別されないので、片方が上書きされて消えてしまう、ということらしい。先ほど一気に 88KB まで減ったのは、このせいだったのだ。上の設定は、この上書きを防ぐためのもの。
というわけで圧縮しなおしてみたところ、サイズは 93KB バイトに。一応 100KB に収まり、実機でも正常に動作した。