2008年03月06日

Flex SDKのswfutilsでswfとXMLの相互変換を試してみる

はてなブックマークに登録

SWFファイルフォーマットとライセンス(その2) で、swfutils.jarがSWFとSWFXというXMLフォーマットで相互変換できそうだとお伝えしましたが、その後相互変換に挑戦してみた経過をまとめます。

Flex SDKの用意

svn trunkのFlex SDKを用意します。(多分、sdk/branches/3.0.x を利用してもこの記事で行っている範囲では同じだと思います)

今回の例では、Windows XPで、C:\usr\flexsdk にFlex SDKをインストールしますが、皆さんの好みで適当に読み替えてください。SubversionとJDKとantはインストールされて環境変数(%PATH%, %JAVA_HOME%, %ANT_HOME%等)は適当に設定されているものとします。

C:\>cd usr\
C:\usr>svn co http://opensource.adobe.com/svn/opensource/flex/sdk/trunk flexsdk
C:\usr>cd flexsdk
C:\usr\flexsdk>ant
C:\usr\flexsdk>set FLEX_SDK=C:\usr\flexsdk
C:\usr\flexsdk>set PATH=%FLEX_SDK%\bin;%PATH%

SWFからSWFXへの変換

この段階で、SWFからSWFXへの変換はできます。ためしに、弊社のTOPページで使われているFlashを解析してみます。http://www.klab.org/images/main.swf をダウンロードして、C:\work ディレクトリ内に保存してください。

C:\usr\flexsdk>cd C:\work
C:\work>swfdump -out klab.swfx main.swf

これで、klab.swfxという名前のXMLファイルができました。

ちなみに、ここでは%FLEX_SDK%/bin/swfdump.exeという実行ファイルを利用しましたが、同じディレクトリにシェルスクリプト版のswfdumpも用意されています。シェルスクリプトのソースを読めば、swfdumpで実際に実行されるのが、java -jar %FLEX_SDK%/lib/swfdump.jar であることが判ります。

swfxc.jarとswfxc.batの作成

今度はSWFXからSWFへの変換をしたいのですが、こちら側のコマンドはありません。ソースコードを読むと、SwfxParser.javaを使えばできそうなので、SWFXからSWFへの変換用のjarを作ってみます。

jarの名前は、SWFX Compilerの略で、swfxc.jarにしました。%FLEX_SDK%/modules/swfutils/build.xmlを修正して、swfxc.jarを作成するようにします。次のpatchを当ててから、もう一度antを実行すれば、%FLEX_SDK%/lib/swfxc.jarができあがります。

Index: build.xml
===================================================================
--- build.xml   (revision 751)
+++ build.xml   (working copy)
@@ -60,13 +60,24 @@
                 <attribute name="Class-Path" value="asc.jar swfutils.jar"/>
             </manifest>
         </jar>
-
+        <echo message="Building lib/swfxc.jar"/>
+        <jar file="${lib.dir}/swfxc.jar" basedir="${module.src}" includes="flash/swf/tools/swfx.xsd">
+            <manifest>
+                <attribute name="Sealed" value="${manifest.sealed}"/>
+                <attribute name="Implementation-Title" value="${manifest.Implementation-Title} - SWFx Compiler"/>
+                <attribute name="Implementation-Version" value="${manifest.Implementation-Version}.${build.number}"/>
+                <attribute name="Implementation-Vendor" value="${manifest.Implementation-Vendor}"/>
+                <attribute name="Main-Class" value="flash.swf.tools.SwfxParser"/>
+                <attribute name="Class-Path" value="asc.jar swfutils.jar"/>
+            </manifest>
+        </jar>
     </target>

     <target name="clean" description="clean">
         <delete failonerror="false" includeEmptyDirs="true">
             <fileset file="${lib.dir}/swfutils.jar"/>
             <fileset file="${lib.dir}/swfdump.jar"/>
+            <fileset file="${lib.dir}/swfxc.jar"/>
             <fileset dir="${module.classes}">
                 <include name="**/*"/>
             </fileset>

このjarを直接叩いても良いのですが、面倒なので、batファイルを作成する事にします。次のようなbatファイルを、%FLEX_SDK%/bin/swfxc.batという名前で作成してください。

java -jar %FLEX_SDK%\lib\swfxc.jar -aspath . %1 %2 %3 %4 %5 %6 %7 %8 %9

swfxc.batができたので、ためしに先ほど作成したklab.swfxをswfに戻してみます。swfxcは引数無しで実行してもusageを出したりしてくれないのですが、 SwfxParser.java を読むと、入力ファイル名を引数で指定し、その拡張子を.swfに変更したものを出力することがわかります。ということで、実行してみましょう。

C:\work>swfxc klab.swfx

・・・klab.swfができません。失敗です。

(続く)


@methane
klab_gijutsu2 at 17:52│Comments(0)TrackBack(0)flash 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント