corelibをFlex3向けにコンパイルしてJSONを使う。
Flex側から自作のAPIを叩くのに、AMF使って書き換えるのも馬鹿らしいので、Jsonのデコーダーがほしかったのだけれど、
as3corelib -
ActionScript 3.0 library for several basic utilities. - Google Project Hosting
にはバイナリがおいていなくて、面倒くさいからぐぐったらFlash/FlashでJSON形式のデータを読み込む (ActionScript2.0を利用) - アークウェブシステム開発SandBoxを見つけた。
しかし、コピーして使ってみようと思ったら大量のエラーが。
ActionScript2と3って互換性ないのね。
というわけで、corelibをコンパイルすることに決める。
エラーが出るんだけれど、それに言及している記事がなかったので簡単にまとめてみる。
結論から言うと、チェックアウトしたディレクトリをそのままコンパイルすると
[exec] C:\cygwin\home\kent\repository\as3corelib-read-only\src\com\adobe\ai r\logging\FileTarget.as(53): col: 38 エラー: 型が見つからないか、コンパイル時定 数ではありません : File。 [exec] public function FileTarget(logFile:File = null)
とか言われる。これはsvn logをみるに
r59 | mikechambers | 2008-08-15 03:08:52 +0900 (Fri, 15 Aug 2008) | 1 line FileTarget logger for Flex Log framework.
と、最近追加されたファイルのようで、特に他に依存関係もないようなので、削除すればコンパイルが通って、ちゃんとswcファイルが生成される。
と、なんとなく、結構使えそうなライブラリなので他の人に説明する時に楽なように、antとかsvnを知らない人もコンパイルできるように書いてみる*1。
はじめに
corelibは
The corelib project consists of several basic utilities for MD5 hashing, JSON serialization, advanced string and date parsing, and more.
とあるように、FlexSDKには含まれていないけれど基本的な、MD5とかJSONとか日付のパースとか文字列関係のユーティリティなどの機能が実装されているライブラリです。
全体の流れを簡単に説明すると、ソースコードをダウンロードしてきてビルドして、アプリケーションのライブラリパスに置く、という手順です。
まず、ソースコードはgoogle codesでserveされています。バイナリは今のところ配布されていないようなので、これを使うためにはソースコードを取得してきて、自前でビルドしてswcファイルを作成する必要があります。
ソースコードはSubversionというリビジョン管理ソフトウェアで管理されているので、まずSubversionクライアントソフトウェアをインストールする必要があります。
クライアントをインストールして、ソースコードを取得できたら、今度はビルドしてライブラリファイルを作る必要があります*2。ビルドにはantというビルドツールが必要です。
ビルドしたら、後はFlex Builder3を使っている場合は、libsディレクトリに配置すれば使えます。
Subversionのインストールとソースコードの取得
前述のとおり、Subversionはリビジョン管理ソフトウェアです。CVSと同じです。
利用するにはクライアントソフトウェアが必要です。
僕自身は、cygwinのsvnクライアントを文句を言いながら使っていますが、Windowsユーザーの方ならTortoiseSVNがいいようです。
インストールの方法は、TortoiseSVNのインストールと設定あたりが詳しいので参考にしてください。
クライアントのインストールが終わったらソースコードのチェックアウトです。
Source Checkout -
as3corelib -
ActionScript 3.0 library for several basic utilities. - Google Project Hosting
には
# Non-members may check out a read-only working copy anonymously over HTTP.
svn checkout http://as3corelib.googlecode.com/svn/trunk/ as3corelib-read-only
とありますので、svnコマンドを使っている人はコピペで動かせます。TortoiseSVNの場合は、as3corelibというディレクトリ*3を作って、ディレクトリを開き、右クリックメニューの「SVN Checkout*4」をクリックします。
すると、checkoutというウィンドウが開きますので「URL of repository」エディットボックスに
http://as3corelib.googlecode.com/svn/trunk/
と入力してOKを押してください。するとずらずらとファイルがダウンロードされてきます。完了すると、
+as3corelib |-build ||-build.properties ||-build.xml |-docs |-examples |-src |-tests
というようなディレクトリ・ファイルが展開されているはずです。
これでソースコードのダウンロードは完了です。
Antのインストールとビルド
Javaの世界では一般的なビルドツールant・・・最近のEclipse世代の方は知らないみたいですね。makeとかantとかmavenとか。
説明は、Apache Ant - ようこそにゆずりますが、ソースコードからライブラリを作ったり、よくやる作業をビルドファイルと呼ばれるxmlに記述しておくとコマンドを打つだけでやってくれるツールです。インストールの手順は、Antインストール - Apache Antの使い方が分かりやすいです。
antをパスの通った場所においたら、ビルドをします。
Flex2をデフォルトの場所にインストールされていて、Flex2で開発している場合には、以下の手順は必要なく、buildでantとタイプすればswcが生成されます。
Flex3をお使いの場合は、リポジトリからチェックアウトしてきたファイルの設定ではコンパイルできません。
build/build.properties
をエディタで開いてください。
13-14行目/21行目に
13 flex2sdk.bin.dir = C:/Program Files/Adobe/Flex Builder 2 Plug-in/Flex SDK 2/bin 14 flex2sdk.lib.dir = C:/Program Files/Adobe/Flex Builder 2 Plug-in/Flex SDK 2/frameworks/libs 21 flashDebugPlayer.exe = C:/Program Files/Adobe/Flex Builder 2 Plug-in/Player/debug/SAFlashPlayer.exe
という記述がありますので、これをFlexBuilder3向けの設定に書き換えます。
私の場合次のようになりました。
13 flex2sdk.bin.dir = C:/Program Files/Adobe/Flex Builder 3/sdks/3.0.0/bin 14 flex2sdk.lib.dir = C:/Program Files/Adobe/Flex Builder 3/sdks/3.0.0/frameworks/libs 21 flex2sdk.locale.dir = C:/Program Files/Adobe/Flex Builder 3/sdks/3.0.0/frameworks/locale/{locale}
書き換えたら、準備完了です。
buildディレクトリにコマンドプロンプトで移動して、
ant
とタイプしてください。
すると冒頭にあげた、
$ ant Buildfile: build.xml properties: lib: [exec] 設定ファイル "C:\Program Files\Adobe\Flex Builder 3\sdks\3.0.0\frame works\flex-config.xml" をロードしています [exec] C:\cygwin\home\kent\repository\as3corelib-read-only\src\com\adobe\ai r\logging\FileTarget.as(53): col: 38 エラー: 型が見つからないか、コンパイル時定 数ではありません : File。 [exec] public function FileTarget(logFile:File = null) [exec] ^ [exec] Result: 1 BUILD SUCCESSFUL Total time: 7 seconds
というようなエラーが出力されます。
コンパイルできるようにすればいいのですが、面倒くさいので、src/com/adobe/airディレクトリを削除してしまってください。
すると今度は
$ ant Buildfile: build.xml properties: lib: [exec] 設定ファイル "C:\Program Files\Adobe\Flex Builder 3\sdks\3.0.0\frame works\flex-config.xml" をロードしています [exec] C:\cygwin\home\kent\repository\as3corelib-read-only\bin\corelib.swc (249529 bytes) BUILD SUCCESSFUL Total time: 6 seconds
と、出力され、binディレクトリ以下にめでたくcorelib.swcが生成されます。
corelib.swcをFlexBuilderで使う
生成されたcorelib.swcをプロジェクトのlibsディレクトリにコピーすればOKです。
ビルドパスが通っているかどうかは、プロジェクトプロパティーのFlexビルドパス、ライブラリパスタブのlibsをクリックして、corelib.swcと表示されていれば問題ありません。
たとえばJSONシリアライザを使いたい場合には、
import com.adobe.serialization.json.JSON; public class Test{ public function test():void{ var json:String = "{\"message\": \"HelloWorld\"}"; var decoded:Object = JSON.decode(json); trace(decoded.message); } }
のようにして使うことができます。
以上。メモでした。