言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Flex と ActionScript で Air アプリを作る方法

デバッグAir アプリを作る

Flex では普通の Flash コンテンツの他に Air というブラウザの外で動くプログラムを作る事が出来ます。Air を使うと、セキュリティ上の理由で Flash では不可能なローカルファイルへの書き込み等が出来るようになります。例えば AirHello 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 パッケージの作成には電子署名が必要ですが、マニュアルの説明が恐ろしく分かりにくかったです。

必要な作業は次の通りです。

  • 証明書の作成。ここでは自己署名を使う方法を書きます。
    • adt -certificate -cn 証明書名 [-ou 組織][-o 組織名][-c 国名] キータイプ(1024-RSA or 2048-RSA) 出力ファイル名 パスワード
  • 証明書と使って 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 コマンドは全く役に立ちませんでした。