2009-08-06 5 views
5

Mam projekt flex i jeśli zbuduję wersję Release aplikacji za pomocą Flash Builder z RSL na moim SWF jest 115k. Jeśli jednak zbuduję tę samą aplikację za pomocą ant, to SWF wynosi 342k. Bez RSL-ów swf wynosi 520k.W jaki sposób uczynić mój SWF wygenerowany przez Ant jak najmniejszym?

Jak mogę przekonwertować plik SWF na tak mały, jak ten zbudowany przez FlashBuilder?

Oto mój plik mrówek Mam inne zadanie, które kopiuje rsls.

<project name="EUI Client Application" default="compileClientApp"> 

<target name="compileClientApp" depends="compileClientBundles"> 
    <mxmlc 
     file="${CLIENT_PROJECT.dir}/src/${CLIENT_PROJECT.app}.mxml" 
     output="${DEPLOY.dir}/${CLIENT_PROJECT.app}.swf" 
     keep-generated-actionscript="false" 
     actionscript-file-encoding="UTF-8" 
     incremental="false" 
     > 

     <runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/framework.swc"> 
      <url rsl-url="flex4_4.0.0.7791.swf"/> 
      <url rsl-url="framework_4.0.0.7791.swf"/> 
      <url rsl-url="framework_textLayout_4.0.0.7791.swf"/> 
      <url rsl-url="rpc_4.0.0.7791.swf"/> 
      <url rsl-url="textLayout_451.swf"/> 
     </runtime-shared-library-path> 

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

     <compiler.library-path dir="${LIBS.dir}" append="true"> 
      <include name="*.swc" /> 
     </compiler.library-path> 
     <compiler.library-path dir="${DEPLOY_BIN.dir}" append="true"> 
      <include name="*.swc" /> 
     </compiler.library-path> 

    </mxmlc> 
</target> 

<target name="generateWrapper"> 
    <html-wrapper 
     title="${CLIENT_APP_TITLE}" 
     file="${CLIENT_PROJECT.app}.html" 
     height="100%" width="100%" 
     bgcolor="white" application="app" 
     swf="${CLIENT_PROJECT.app}" 
     version-major="10" version-minor="0" version-revision="0" 
     history="true" output="${DEPLOY.dir}" /> 
</target> 

<target name="compileClientBundles"> 
    <compileBundle bundleName="Modules" source="${CORE_PROJECT.dir}/locale" /> 
</target> 

+0

jakie są argumenty kompilatora w Flex/Flash Builder dla tego projektu? – DyreSchlock

Odpowiedz

2

Dzięki za odpowiedzi, ale to nie był żaden z nich.

Okazuje się, że wszystko, co musiałem zrobić, to usunąć pliki środowiska wykonawczego-biblioteki-udostępnionej, które już znajdują się w pliku flex-config.xml. Musiałem również zmienić statyczne-link-środowisko-biblioteki-współdzielone na false (więc jest dynamiczne).

Skopiowałem plik flex-config.xml do mojego katalogu kompilacji i używam go, aby móc bezpiecznie wprowadzać zmiany.

Jest to z Flex 4 BTW - nto na pewno, jeśli zrobiłem to bardzo wyraźnie.

mój mrówka plik teraz wygląda tak:

<project name="EUI Client Application" default="compileClientApp"> 

<target name="compileClientApp" depends="compileClientBundles"> 
    <mxmlc 
     file="${CLIENT_PROJECT.dir}/src/${CLIENT_PROJECT.app}.mxml" 
     output="${DEPLOY.dir}/${CLIENT_PROJECT.app}.swf" 
     keep-generated-actionscript="false" 
     actionscript-file-encoding="UTF-8" 
     optimize="true" incremental="false" 
     link-report="${DEPLOY_BIN.dir}/app_link_report.xml" 
     > 

     <load-config filename="${basedir}/flex-config.xml" /> 

     <define name="CONFIG::stub" value="false" /> 
     <define name="CONFIG::release" value="true" /> 

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

     <compiler.library-path dir="${LIBS.dir}" append="true"> 
      <include name="*.swc" /> 
     </compiler.library-path> 
     <compiler.library-path dir="${DEPLOY_BIN.dir}" append="true"> 
      <include name="*.swc" /> 
     </compiler.library-path> 
    </mxmlc> 
</target> 

<target name="generateWrapper"> 
    <html-wrapper 
     title="${CLIENT_APP_TITLE}" 
     file="${CLIENT_PROJECT.app}.html" 
     height="100%" width="100%" 
     bgcolor="white" application="app" 
     swf="${CLIENT_PROJECT.app}" 
     version-major="10" version-minor="0" version-revision="0" 
     history="true" output="${DEPLOY.dir}" /> 
</target> 

<target name="compileClientBundles"> 
    <compileBundle bundleName="Modules" source="${CORE_PROJECT.dir}/locale" /> 
</target> 

1

Prawdopodobnie będziesz musiał podać ścieżki do bibliotekami zewnętrznymi z wykorzystaniem opcję zewnętrznaTrybunał-library-path.

Aby uzyskać więcej informacji, patrz the docs.

Aby korzystać z bibliotek RSL w kodzie podczas kompilowania aplikacji, należy użyć następujących opcji kompilatora Zastosowanie:

* runtime-shared-libraries Provides the run-time location of the shared library. 
* external-library-path|externs|load-externs Provides the compile-time location of the libraries. The compiler requires this for dynamic linking. 

należy wybrać opcję runtime-shared-biblioteki, aby określić lokalizację pliku SWF aplikacja ładuje się jako RSL w czasie wykonywania. Użytkownik określa położenie pliku SWF w odniesieniu do lokalizacji wdrożenia aplikacji. Na przykład, jeśli przechowujesz plik library.swf w katalogu web_root/libraries na serwerze sieciowym, a aplikację w katalogu głównym, określasz biblioteki/library.swf.

Za pomocą tej opcji można określić jedną lub więcej bibliotek. Jeśli podasz więcej niż jedną bibliotekę, oddziel każdą bibliotekę przecinkiem.

Użyj opcji ścieżka biblioteki zewnętrznej, aby określić położenie pliku SWC biblioteki lub katalogu otwartego, do którego odwołuje się aplikacja podczas kompilacji. Kompilator zapewnia sprawdzanie połączenia podczas kompilacji przy użyciu biblioteki określonej przez tę opcję. Można również użyć opcji externs lub load-externs, aby określić poszczególne klasy lub plik XML definiujący zawartość biblioteki.

Poniższy przykład polecenie linii zestawia stosowania myApp pośrednictwem dwóch bibliotek:

mxmlc -runtime współdzielony-bibliotek = ../libraries/CustomCellRenderer/library.swf, ../libraries/CustomDataGrid /library.swf zewnętrznaTrybunał-library-path = ../libraries/CustomCellRenderer, ../libraries/CustomDataGrid MyApp.mxml

kolejność bibliotek jest znacząca, ponieważ klasy bazowe muszą być załadowane przed klasami które z nich korzystają.

Można również użyć pliku konfiguracyjnego, co ilustruje poniższy przykład:

../libraries/CustomCellRenderer ../libraries/CustomDataGrid ../libs/playerglobal.swc ../libraries/CustomCellRenderer/library.swf ../libraries/CustomDataGrid/library.swf

Opcja runtime-shared-libraries jest względną lokalizacją plików library.swf, gdy aplikacja została wdrożona. Opcja ścieżki zewnętrznej biblioteki jest położeniem pliku SWC lub katalogu otwartego w czasie kompilacji. Z tego powodu podczas kompilowania musisz znać lokalizacje rozmieszczenia bibliotek względem aplikacji. Podczas tworzenia biblioteki nie trzeba znać struktury wdrażania, ponieważ kompilator wiersza polecenia compc służy do tworzenia pliku SWC.

1

Spróbuj oddzielić swoje listy RSL na własne argumenty. Oto, jak mam to na swojej kompilacji:

<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/framework.swc"> 
    <url rsl-url="${rsl.url}/framework_3.2.0.3958.swz" /> 
    <url rsl-url="${rsl.url}/framework_3.2.0.3958.swf" /> 
</runtime-shared-library-path> 

<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/datavisualization.swc"> 
    <url rsl-url="${rsl.url}/datavisualization_3.2.0.3958.swz" /> 
    <url rsl-url="${rsl.url}/datavisualization_3.2.0.3958.swf" /> 
</runtime-shared-library-path> 
0

Korzystanie RSL, należy pamiętać, aby ustawić parametr use-sieciowe z prawdą, w przeciwnym razie zostanie skompilowany swf skarżą błąd zabezpieczeń (nie może załadować RSL) po uruchomieniu w innej lokalizacji.

Powiązane problemy