2009-08-06 24 views
5

Tôi có một dự án flex và nếu tôi xây dựng một phiên bản phát hành của ứng dụng bằng cách sử dụng trình tạo flash với RSL trên swf của tôi là 115k. Tuy nhiên, nếu tôi xây dựng cùng một ứng dụng bằng cách sử dụng kiến ​​swf là 342k. Nếu không có RSL, swf là 520k.Làm cách nào để tạo Swf được tạo ra Ant của tôi càng nhỏ càng tốt?

Làm thế nào để tôi nhận được swf nhỏ nhất là SWF được xây dựng bởi FlashBuilder?

Đây là tệp kiến ​​của tôi Tôi có một nhiệm vụ khác để sao chép các bản ghi.

<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

đối số trình biên dịch của bạn trong Flex/Flash Builder cho dự án này là gì? – DyreSchlock

Trả lời

2

Cảm ơn bạn đã trả lời nhưng không phải là một trong số đó.

chỉ ra tất cả những gì tôi cần làm là xóa các công cụ chạy-chia sẻ-thư viện-đường dẫn vì điều này đã có trong tệp flex-config.xml. Tôi cũng đã phải thay đổi các thư viện tĩnh-link-runtime-shared-false thành false (do đó nó là động).

Tôi đã sao chép tệp flex-config.xml vào thư mục xây dựng của mình và sử dụng để tôi có thể thực hiện thay đổi một cách an toàn.

Điều này là với Flex 4 BTW - chắc chắn nếu tôi thực hiện điều đó rất rõ ràng.

tập kiến ​​của tôi bây giờ trông như thế này:

<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

Bạn có lẽ sẽ cần phải xác định các đường dẫn đến thư viên bên ngoài bằng cách sử dụng -external-thư viện-path tùy chọn.

Xem the docs để biết thêm thông tin.

Để sử dụng RSL khi biên dịch ứng dụng của bạn, bạn sử dụng các tùy chọn trình biên dịch ứng dụng sau:

* 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. 

Sử dụng tùy chọn runtime-chia sẻ-thư viện để xác định vị trí của tập tin SWF ứng dụng tải dưới dạng RSL khi chạy. Bạn chỉ định vị trí của tệp SWF liên quan đến vị trí triển khai của ứng dụng. Ví dụ, nếu bạn lưu trữ tệp library.swf trong thư mục web_root/libraries trên máy chủ web và ứng dụng trong thư mục gốc của web, bạn chỉ định thư viện/library.swf.

Bạn có thể chỉ định một hoặc nhiều thư viện với tùy chọn này. Nếu bạn chỉ định nhiều hơn một thư viện, hãy tách riêng từng thư viện bằng dấu phẩy.

Sử dụng tùy chọn đường dẫn thư viện bên ngoài để chỉ định vị trí của tệp SWC của thư viện hoặc thư mục mở mà ứng dụng tham chiếu tại thời gian biên dịch. Trình biên dịch cung cấp kiểm tra liên kết thời gian biên dịch bằng cách sử dụng thư viện được chỉ định bởi tùy chọn này. Bạn cũng có thể sử dụng các tùy chọn extern hoặc load-externs để chỉ định các lớp riêng lẻ hoặc một tệp XML định nghĩa nội dung của thư viện.

Sau đây ví dụ dòng lệnh biên dịch ứng dụng MyApp có sử dụng hai thư viện:

mxmlc -runtime-chia sẻ-thư viện = ../libraries/CustomCellRenderer/library.swf, ../libraries/CustomDataGrid /library.swf -external-thư viện-path = ../thư viện/CustomCellRenderer, ../libraries/CustomDataGrid MyApp.mxml

thứ tự của các thư viện là quan trọng bởi vì các lớp cơ sở phải được nạp trước lớp sử dụng chúng.

Bạn cũng có thể sử dụng một tập tin cấu hình, như ví dụ sau đây cho thấy:

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

Tùy chọn thư viện chia sẻ thời gian chạy là vị trí tương đối của tệp thư viện.swf khi ứng dụng được triển khai. Tùy chọn đường dẫn thư viện bên ngoài là vị trí của tệp SWC hoặc thư mục mở tại thời gian biên dịch. Bởi vì điều này, bạn phải biết vị trí triển khai của các thư viện liên quan đến ứng dụng khi bạn biên dịch nó. Bạn không cần phải biết cấu trúc triển khai khi bạn tạo thư viện, bởi vì bạn sử dụng trình biên dịch dòng lệnh compc để tạo một tệp SWC.

1

Hãy thử tách RSL của bạn thành các đối số của riêng chúng. Dưới đây là những gì tôi có trong tòa nhà của mình:

<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

Sử dụng RSL, hãy nhớ để thiết lập thông số sử dụng mạng là true, nếu không swf biên soạn sẽ phàn nàn lỗi bảo mật (không thể tải RSL) khi chạy ở vị trí khác.