2007-03-24
■ Adobe Apollo Alpha Application with Ant

Apolloのαがリリースされて一週間足らずだというのに、もうこんなに使い方やら試用報告やら出てきてて、これがアルファギークというものですか。
- Page not found « Adobe Blogs
- Apollo 触ってみた。すごすぎ。 - てっく煮ブログ
- はじめてのApolloプログラミング
- Adobe AIRメモ
- CUI での apollo 開発 - #生存戦略 、それは - subtech
- アルファ公開したアドビ「Apollo」を早速使ってみた − @IT
ApolloにはLinux版がまだ無いし、正直興味は薄かったのだけど、面白そうなのでアルファギークたちに食らいついてみることにした。先頭グループの最後尾は理想のポジションだ。
ちなみに環境はこんなの。
コンパイル
amxmlc はどうやら単に mxmlc に +configname=apollo オプションがついただけみたいなので、今もう既にmxmlcを動かせる環境があれば簡単にamxmlcに移行できる。以下はbuild.xmlから抜粋したもの。
<target name="compile"> <java classname="flex2.tools.Compiler" classpath="${flex2.home}/lib/mxmlc.jar" fork="true"> <jvmarg value="-Dapplication.home=${flex2.home}"/> <jvmarg value="-Xmx384m"/> <jvmarg value="-Dsun.io.useCanonCaches=false"/> <arg value="+configname=apollo"/> <arg value="-output=Hello.swf"/> <arg value="-default-size=800,600"/> <arg value="-default-frame-rate=30"/> <arg value="-default-background-color=0xFFFFFF"/> <arg value="-file-specs=Hello.as"/> </java> </target>
Flex Ant Tasks の mxmlcタスクだとどうするんだろう? たぶん待ってればそのうちApollo対応したFlex Ant Tasksが出てくるんじゃないの。
実行
実行するだけなら Apollo ランタイムをインストールしなくても、SDKに含まれているADLで実行できる。ADLはスタンドアローンFlashPlayerみたいなもんだ。
<target name="run" depends="compile"> <exec executable="${flex2.home}/bin/adl.exe"> <arg value="application.xml"/> </exec> </target>
ここで出てくるapplication.xmlはADFというやつで、Apollo SDKのsrcに含まれているapplication.xmlからコピーしてきて適当に編集すればOK。
この時点ではアイコンは無くても動く。
リリースパッケージ作成
airファイルを作るのはADTで。ADTも単純なjavaアプリケーションみたいなので、Antから実行するのはこんな感じでOK。
<target name="release" depends="compile"> <java classname="com.adobe.apollo.ADT" classpath="${flex2.home}/lib/adt.jar" fork="true"> <arg line="-package Hello.air application.xml Hello.swf icons"/> </java> </target>
airファイルは拡張子が異なるだけで中身は単なるzipファイルみたいだ。ADTも今は単純なjar相当なんだろうけど、たぶんそのうち署名とかつけられるようになっていくのだろう。
アプリケーションのインストール
ランタイムがある環境でairファイルをインストールすると、WindowsだとC:\Documents and Settings\ユーザ名\Program Files\《publisher名》\ の下にairファイルの中身が展開される。《publisher名》はADFに書いたやつ。ただ展開するだけじゃなくてexeファイルを作っているところなんか面白い。
アンインストールはコントロールパネルの「プログラムの追加と削除」から。
ディレクトリツリーのビジュアライゼーション
せっかくなので、Flash(Flex)じゃできないことをしてみたい。手持ちのコードでxmlのツリー構造をhyperbolic tree
で表示するものがあるので、ディレクトリツリーを表示してみることにした。
指定したディレクトリ以下のツリー構造を作るのはこんなコードで、<ul><li>でツリー構造を作れる。E4Xがまだ上手く書けない。もっと簡潔に書けるような気がするのだけど。
import flash.filesystem.File; ... var xml:XML = <div>apollo_alpha1_docs</div>; traverse(xml, new File("c:/usr/doc/apollo_alpha1_docs")); ... private function traverse(xml:XML, dir:File):void { var a:Array; if (dir == null) { a = File.listRootDirectories(); } else { a = dir.listDirectory(); } for (var i:int = 0; i < a.length; ++i) { var file:File = a[i]; if (file.isDirectory) { var li:XML = <li/>; li.text()[0] = file.name; xml.ul.li[i] = li; traverse(li, file); } } }
ディレクトリへのシンボリックリンクがあったりしたら、どうなるんだろう? Linux版が出たらまた調べてみる。
Apolloドキュメントのツリー構造を表示してみたのがこれ。
さてこれで端的に言うと「ローカル資源にアクセスできるFlash」が作れるようになったので、いろいろ面白そうなものが出てきそうな予感がする。たとえばPapervision3Dを使ったファイルシステムナビゲータ(ジュラシックパークのアレ)みたいなやつとか。
セキュリティ的にいかがなものかという気持ちもまあわかるけど、イノベーションとか妙に面白いものってちょっと危険な匂いのするところや、社会的にグレーなゾーンから生まるものじゃないですか。今後要注目ってところじゃないかな。






