Windows で Flex SDK をビルドしてみた
Windows XP で、オリジナル mxmlc から SWF を作るところまで。
まずは、README.txt に従って、下準備。
J2SDK の導入
Archive: Download Java 2 SDK, Standard Edition, v 1.4.2_14 (J2SE) から j2sdk1.4.2_14 をダウンロード。
C:\j2sdk1.4.2_14 にインストールする。
Apache Ant の導入
http://archive.apache.org/dist/ant/binaries/ より apache-ant-1.6.2-bin.zip をダウンロード。
C:\apache-ant-1.6.2 に展開。
Cygwin の導入
http://cygwin.com/ から setup.exe を実行。
全てデフォルトで。
環境設定
ここからは Build and Test - Flex SDK - Confluence を見ながら。
trunk、tags、branches の中からビルドするものを選ぶ。ここでは、trunk でビルドしてみることにする。
cygwin を起動。trunk のフォルダに移動して、setup.sh を実行する。
cd flex/sdk/trunk source setup.sh
エラーが出た。
bash: $'\r': command not found bash: $'\r': command not found bash: $'\r': command not found bash: setup.sh: line 41: syntax error near unexpected token `$'in\r'' 'ash: setup.sh: line 41: `case `uname` in
setup.sh の改行コードを LF にしたらうまくいった。
$ source setup.sh setup.sh: Setting default ANT_HOME=/cygdrive/c/apache-ant-1.6.2 setup.sh: Setting default JAVA_HOME=/cygdrive/c/j2sdk1.4.2_14
ant や j2sdk が見つからない場合は、
setup.sh: setup.sh: WARNING: JAVA_HOME does not exist: /cygdrive/c/j2sdk1.4.2_14
のように警告がでる。この場合、正しい場所に導入するか、setup.sh のほうをいじって、パスを変更するべし。再度、setup.sh を叩いて WARNING が出ないことを確認しよう。
ビルド
えいーっ
ant -q main
出力
$ ant -q main cygpath: can't convert empty path [echo] Building lib/swfutils.jar [echo] Building lib/swfdump.jar [javac] 注: 一部の入力ファイルは推奨されない API を使用またはオーバーライド しています。 [javac] 注: 詳細については、-deprecation オプションを指定して再コンパイルし てください。 [echo] Building lib/fdb.jar (中略) [echo] Compiling frameworks/projects/flash_integration/libs/FlexComponentBa se.swc [echo] ant main target completed on 03/07/2008 12:45:21 午前 BUILD SUCCESSFUL Total time: 3 minutes 5 seconds
中途半端に日本語なのが気持ち悪いが Build and Test - Flex SDK - Confluence とだいたい同じ出力になった。
出力結果
lib フォルダに色々できてる。
mxmlc.jar だけじゃなく、mxmlc_ja.jar (日本語版)まで出力されてたりするのがびっくり。
ついでに、framework.swc (mx パッケージの下)なんかもコンパイルされてる。その辺も含めてビルドするのか…。
テスト実施
ant -q checkintests
Flash Player が起動して、自動でテストが始まるのが愉快。
$ ant -q checkintests cygpath: can't convert empty path [echo] launching player and swf [echo] compiling checkinapp [echo] launching player and swf BUILD SUCCESSFUL Total time: 37 seconds
途中でプレーヤーを触ると、例外が出ることがある。UI のテストなんだから、そんなもんか。
コンパイル
$ bin/mxmlc.exe Test.as 設定ファイル "N:\program\as\flexsdk\trunk\frameworks\flex-config.xml" をロードし ています N:\program\as\flexsdk\trunk\Test.swf (683 bytes)
mxmlc を使う場合は LF に変換しないとエラーになる。
うまくいってるか半信半疑。ならば…。
ソースをいじる
世界で1つだけの mxmlc を作る。
modules\compiler\src\java\flex2\tools\Compiler.java に次のようなソースが。
/** * The entry-point for Mxmlc. * Note that if you change anything in this method, make sure to check Compc, Shell, and * the server's CompileFilter to see if the same change needs to be made there. You * should also inform the Zorn team of the change. * * @param args */ public static void main(String[] args) { mxmlc(args); System.exit(ThreadLocalToolkit.errorCount()); }
おお、これが mxmlc のエントリポイントのようだ。ならば、main の先頭に
System.out.print("Hello World\n");
と突っ込む。
mxmlc をリビルドする。全部ビルドすると時間かかるので、compiler のみをビルドしよう。
$ ant -q compiler cygpath: can't convert empty path (中略) [echo] Building lib/mxmlc.jar [echo] Building lib/mxmlc_ja.jar (中略) BUILD SUCCESSFUL Total time: 17 seconds
準備は整った。オリジナルな mxmlc で ActionScript をコンパイルしてみる。
$ bin/mxmlc.exe Test.as Hello World 設定ファイル "N:\program\as\flexsdk\trunk\frameworks\flex-config.xml" をロードし ています N:\program\as\flexsdk\trunk\Test.swf (683 bytes)
ヤター!! ちゃんと Flash Player で再生できるよ!
TODO
Hacking the Flex SDK の人は Bindable の挙動をいじるところまでやってる。もう一息。