デバッグ用 Air アプリを作る
Flex では普通の Flash コンテンツの他に Air というブラウザの外で動くプログラムを作る事が出来ます。Air を使うと、セキュリティ上の理由で Flash では不可能なローカルファイルへの書き込み等が出来るようになります。例えば Air 版 Hello World プログラムはこんな感じです。helloAir.as と名付けます。
package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; public class helloAir extends Sprite { public function helloAir(){ this.addEventListener(Event.ADDED_TO_STAGE, function(event:Event):void { event.target.stage.nativeWindow.activate(); }); var field:TextField = new TextField(); field.text = "Hello, Wrold!" addChild(field); } } }
コンパイルには mxmlc の代わりに amxmlc を使います。
$ amxmlc helloAir.as
Air にはもう一つ設定ファイルが必要です。設定ファイルに swf ファイル名を指定します。helloAir.xml と名付けます。
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://ns.adobe.com/air/application/1.5"> <id>helloAir</id> <filename>helloAir</filename> <name>helloAir</name> <version>v1</version> <initialWindow> <content>helloAir.swf</content> </initialWindow> </application>
設定ファイル名を adl コマンドで指定すれば Air アプリとして実行出来ます。
$ adl helloAir.xml
helloAir.as の例にあるように ADDED_TO_STAGE イベントを使って Nativewindow.activate() でウインドウを表示しています。これを省略すればウインドウ無しのアプリを作る事も出来ます。例えば ls コマンドを作ってみます。
package { import flash.desktop.NativeApplication; import flash.display.Sprite; import flash.events.Event; import flash.filesystem.File; public class ls extends Sprite { public function ls(){ var files:Array = File.applicationDirectory.getDirectoryListing(); for each (var item:File in files) trace(item.name); NativeApplication.nativeApplication.exit(0); } } }
mac の場合メニューバーがころころ変わって鬱陶しいですが、それなりに ls っぽく動きます。
配布用 Air パッケージを作る。
作ったプログラムを配布するには Air パッケージを使います。Air パッケージの作成には電子署名が必要ですが、マニュアルの説明が恐ろしく分かりにくかったです。
必要な作業は次の通りです。
- 証明書の作成。ここでは自己署名を使う方法を書きます。
- 証明書と使って Air パッケージを作成。
- adt -package 署名オプション 出力ファイル名 設定ファイル名 [ パッケージに含めるファイルのリスト ]
以下コマンドライン例です。
$ adt -certificate -cn propella 2048-RSA cert.p12 test $ adt -package -storetype pkcs12 -keystore cert.p12 helloAir.air helloAir.xml helloAir.swf password: test
ちなみに、trace はデバッグ環境でしか動かないので上で作った ls コマンドは全く役に立ちませんでした。