2011-02-09 15 views
3

我正嘗試構建一個flex項目,並將其鏈接到一些RLS。當設置在Flex Builder項目,「打造配置」(即我加入-dump-config來編譯器選項)生成(除其他事項外)這樣的標籤對應:將運行時庫路徑添加到使用ant mxmlc的flex構建配置任務

<runtime-shared-libraries> 
    <url>some-lib.swf</url> 
    <url>some-other-lib.swf</url> 
</runtime-shared-libraries> 

現在,我正在嘗試使用mxmlc ant任務來構建項目,但似乎無法添加對共享庫的任何引用。我認爲像這樣會有幫助,但它沒有:

<!-- Skipping attributes that I don't think are relevant ... --> 
<mxmlc ....> 
... 
<runtime-shared-library-path> 
<url rsl-url="some-lib.swf"></url> 
<url rsl-url="some-other-lib.swf"></url> 
</runtime-shared-library-path> 
</mxmlc> 

那麼我在這裏可能會錯過什麼?

感謝

回答

9

您將需要通過「路徑元素」屬性來指定路徑到您的自定義庫的SWC的「運行時共享庫​​路徑「元素,並在」url「元素中定義指向SWF的」rsl-url「。請注意,這是每個自定義RSL單獨需要的。

要實現這一目標,您需要解壓縮SWC並從中提取SWF,以便編譯器可以將其複製到輸出文件夾。

對帖子here有一個評論,它描述瞭如何將Mate框架包含爲RSL。我在下面添加了有趣的部分。

首先,您必須自己從SWC文件中提取SWF文件。

<macrodef name="create-rsl"> 
    <attribute name="rsl-dir" /> 
    <attribute name="swc-dir" /> 
    <attribute name="swc-name" /> 
    <sequential> 
    <unzip src="@{swc-dir}/@{swc-name}.swc" dest="@{rsl-dir}" > 
     <patternset> 
     <include name="library.swf" /> 
     </patternset> 
    </unzip> 
    <move file="@{rsl-dir}/library.swf" tofile="@{rsl-dir}/@{swc-name}.swf"/> 
    </sequential> 
</macrodef> 

<target name="extract-rsls"> 
    <!-- Third parties RSLs --> 
    <create-rsl rsl-dir="${build.rsls.dir}" swc-dir="${lib.dir}" swc-name="mate" /> 
</target> 

然後,你需要把這個SWF文件作爲RSL:

<target name="compile"> 
    <mxmlc file="${src.dir}/MyApplication.mxml" output="${build.dir}/MyApplication.swf" locale="${locale}" debug="false"> 
    <!-- Flex default compile configuration --> 
    <load-config filename="${flex.frameworks.dir}/flex-config.xml" /> 

    <!-- Main source path --> 
    <source-path path-element="${src.dir}" /> 

    <runtime-shared-library-path path-element="${lib.dir}/mate.swc"> 
     <url rsl-url="rsls/mate.swf" /> 
    </runtime-shared-library-path> 
    </mxmlc> 
</target> 
+0

我會盡力,謝謝。但是,這是否意味着在實踐中,Flash Builder會這樣做:「解壓縮swc - 使swf脫離它 - 在swc中編譯併爲運行時指定swf url」? (我試圖理解爲什麼螞蟻必須經歷所有這些......) – phtrivier 2011-02-15 14:11:23

1

我猜你缺少的路徑元素

 <runtime-shared-library-path path-element="${FLEX_FRAMEWORK}/framework.swc"> 
      <url rsl-url="framework_3.4.1.10084.swf"/> 
      <!--<url rsl-url="datavisualization_3.2.0.3958.swf"/>--> 
     </runtime-shared-library-path> 
+1

這似乎只是添加元素到配置的「<運行時共享庫​​路徑>」部分(這是合乎邏輯的)。這是我將用於框架RSL的;在我的情況下,我想添加對正在編譯的RSL的引用(並且Flex Builder將它添加到配置文件的部分,所以我也天真地試圖做到這一點......) – phtrivier 2011-02-10 09:04:45

0

你會發現這個XSL有用。你可以從ant調用它並從你的.actionScriptProperties文件生成你的RSL條目。我希望這可以幫助每個人通過RSL地獄!看到這裏:

<mxmlc output="${{dist.dir}}/${{inputMXML}}.swf" 
        file="${{src.dir}}/${{inputMXML}}.mxml" 
        locale="${{compiler.locale}}" 
        use-network="${{compiler.use-network}}" 
        debug="false" 
        optimize="true" 
        incremental="false"> 
       <load-config filename="${{FLEX_HOME}}/frameworks/flex-config.xml"/> 

       <source-path path-element="${{src.dir}}"/> 

       <!-- Project RSLs --> 
      <xsl:for-each select="//libraryPath/libraryPathEntry"> 
       <xsl:if test="@linkType = '1'"> 
      <compiler.library-path> 
       <!-- substring before last '/' --> 
       <xsl:attribute name="dir"> 
         <xsl:call-template name="substring-before-last"> 
            <xsl:with-param name="list" select="@path" /> 
            <xsl:with-param name="delimiter" select="'/'" /> 
           </xsl:call-template> 
       </xsl:attribute> 
       <xsl:attribute name="append">true</xsl:attribute> 
         <xsl:element name="include"> 
           <xsl:attribute name="name"> 
              <!-- substring after last '/' --> 
              <xsl:call-template name="substring-after-last"> 
               <xsl:with-param name="string" select="@path" /> 
               <xsl:with-param name="delimiter" select="'/'" /> 
              </xsl:call-template> 
           </xsl:attribute> 
         </xsl:element> 
      </compiler.library-path> 
       </xsl:if> 
     </xsl:for-each> 



       <!-- Framework RSLs. Note: Order is important. Also note: swz comes 
         first. This is the signed version of the library which once 
         downloaded can be used cross-domain, possibly saving bandwidth --> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/textLayout.swc"> 
         <url rsl-url="textLayout_2.0.0.232.swz"/> 
         <url rsl-url="textLayout_2.0.0.232.swf"/> 
       </runtime-shared-library-path> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/framework.swc"> 
         <url rsl-url="framework_4.6.0.23201.swz"/> 
         <url rsl-url="framework_4.6.0.23201.swf"/> 
       </runtime-shared-library-path> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/osmf.swc"> 
         <url rsl-url="osmf_1.0.0.16316.swz"/> 
         <url rsl-url="osmf_1.0.0.16316.swf"/> 

       </runtime-shared-library-path> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/charts.swc"> 
         <url rsl-url="charts_4.6.0.23201.swz"/> 
         <url rsl-url="charts_4.6.0.23201.swf"/> 
       </runtime-shared-library-path> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/rpc.swc"> 
         <url rsl-url="rpc_4.6.0.23201.swz"/> 
         <url rsl-url="rpc_4.6.0.23201.swf"/> 
       </runtime-shared-library-path> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/mx/mx.swc"> 
         <url rsl-url="mx_4.6.0.23201.swz"/> 
         <url rsl-url="mx_4.6.0.23201.swf"/> 
       </runtime-shared-library-path> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/spark.swc"> 
         <url rsl-url="spark_4.6.0.23201.swz"/> 
         <url rsl-url="spark_4.6.0.23201.swf"/> 
       </runtime-shared-library-path> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/advancedgrids.swc"> 
         <url rsl-url="advancedgrids_4.6.0.23201.swz"/> 
         <url rsl-url="advancedgrids_4.6.0.23201.swf"/> 
       </runtime-shared-library-path> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/sparkskins.swc"> 
         <url rsl-url="sparkskins_4.6.0.23201.swz"/> 
         <url rsl-url="sparkskins_4.6.0.23201.swf"/> 
       </runtime-shared-library-path> 
       <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/spark_dmv.swc"> 
         <url rsl-url="spark_dmv_4.6.0.23201.swz"/> 
         <url rsl-url="spark_dmv_4.6.0.23201.swf"/> 
       </runtime-shared-library-path> 

       <!-- Project RSLs --> 
       <!-- Flex Ant Task Shortcoming. --> 
       <xsl:for-each select="//libraryPath/libraryPathEntry"> 
       <xsl:if test="@linkType = '4'"> 
         <runtime-shared-library-path> 
           <xsl:attribute name="path-element"> 
             <xsl:value-of select="@path" /> 
           </xsl:attribute> 
         <xsl:element name="url"> 
           <xsl:attribute name="rsl-url"> 
            <xsl:value-of select="crossDomainRsls/crossDomainRslEntry/@rslUrl" /> 
           </xsl:attribute> 
         </xsl:element> 
         </runtime-shared-library-path> 
       </xsl:if> 
     </xsl:for-each> 
    </mxmlc> 
相關問題