2012年2月15日水曜日

大規模なAIRアプリのパッケージング

今作成しているAdobeAIRアプリが,HTML+Javascriptベースでファイル数にして約27000,容量で約7.9GBというかなり大きなものなのですが,これをAIR SDKのadtコマンドを使ってパッケージ化しようとしたところ,adt自身がOutOfMemoryErrorを出して,お亡くなりになってしまうことが判明。(ちなみに,環境はWindows Vista 64bit。メモリは6GB。)
adtコマンド自体はバッチファイルで,実体はjavaで動いているので,バッチファイルをちょっと修正してJavaVMのヒープメモリを増やしたりしたものの,解決せず。(ただ,JavaVMのヒープメモリが1.6GBくらいまでしか増やすことができなかったのも,よくわからないけど。)

今回,ファイル数・ファイルサイズの大部分を占めているのは,当然アプリケーション部分ではなく,画像・動画といったコンテンツ部分。アプリケーション部分は,数百KB程度。

  1. このアプリケーション部分だけをまず取り出して,キャプティブランタイムバンドル形式でパッケージ化。
  2. その上で,その中の適切な場所に,コンテンツをコピー。
とりあえず,この方法で今回はクリアすることに。

この方法では,Windows・Macといった実行環境に依存してしまう難点があるが,今回のアプリそのものがWindowsに依存しているので,これは問題なし。あと,AIRランタイム自体のアップデートができないけど,まあしょうがないでしょう。どちらかというと,将来のランタイムアップデートで動かなくなる危険が避けられるという後ろ向きなメリットもあるか?

あと,実際にはローカルのHDDにインストールする必要があるので,インストーラを作らないといけないけど,まあそれも作ればいいだけなので。