كيف يمكنني جعل النمل الذي تم إنشاؤه SWF صغير قدر الإمكان؟

StackOverflow https://stackoverflow.com/questions/1238767

  •  11-09-2019
  •  | 
  •  

سؤال

لدي مشروع Flex وإذا قمت ببناء إصدار إصدار من التطبيق باستخدام Brash Builder مع RSLS على SWF هو 115K. إذا كنت أبني نفس التطبيق باستخدام النمل، فإن SWF هو 342k. بدون RSLs The SWF 520k.

كيف يمكنني الحصول على SWF ليكون صغيرا مثل واحد مبني بواسطة FlashBuilder؟

هنا هو ملف النمل لدي مهمة أخرى تقوم بنسخ 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>

هل كانت مفيدة؟

المحلول

شكرا على الردود الرجال ولكن لم يكن أي من هؤلاء.

اتضح كل ما احتاجه للقيام به هو إزالة أشياء مسار المكتبة المشتركة في وقت التشغيل لأن هذا موجود بالفعل في ملف Flex-Config.xml. اضطررت أيضا إلى تغيير المكتبات المشتركة بين الحزام الساكنة - إلى FALSE (لذلك إنها ديناميكية).

لقد قمت بنسخ ملف Flex-Config.xml إلى دليل البناء الخاص بي واستخدام ذلك حتى أتمكن من إجراء تغييرات بأمان.

هذا هو مع Flex 4 BTW - NTO متأكد إذا قمت بوضوح جدا.

يبدو الآن ملف النمل الآن:

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

نصائح أخرى

ربما تحتاج إلى تحديد المسارات إلى Libs الخارجية باستخدام - مسار المكتبة اختيار.

يرى المستندات لمزيد من المعلومات.

لاستخدام RSLs عند تجميع التطبيق الخاص بك، يمكنك استخدام خيارات مترجم التطبيق التالية:

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

استخدم خيار المكتبات المشتركة في وقت التشغيل لتحديد موقع ملف SWF الذي يتم تحميل التطبيق كحزمة RSL في وقت التشغيل. يمكنك تحديد موقع ملف SWF نسبي إلى موقع نشر التطبيق. على سبيل المثال، إذا قمت بتخزين ملف Library.swf في دليل Web_Root / Libraries على خادم الويب، وتطبيقه في جذر الويب، يمكنك تحديد المكتبات / Library.SWF.

يمكنك تحديد مكتبات واحدة أو أكثر مع هذا الخيار. إذا قمت بتحديد أكثر من مكتبة، افصل كل مكتبة بفاصلة.

استخدم خيار مسار المكتبة الخارجية لتحديد موقع ملف SWC ل SWC المكتبة أو فتح التطبيق المراجع في وقت الترجمة. يوفر برنامج التحويل البرمجي فحص الرابط في وقت الترجمة باستخدام المكتبة المحددة بواسطة هذا الخيار. يمكنك أيضا استخدام خيارات الخارجية أو غير الحمولة لتحديد الفئات الفردية أو ملف XML يحدد محتويات المكتبة.

يزيد مثال سطر الأوامر التالي على تطبيق MyApp الذي يستخدم مكتبين:

MXMLC -RONTIME - المكتبات المشتركة = ../libraries/customcellRenderer/library.swf، ../libraries/customdatagrid/library.swf-extry-library-path = .. / libraries / customcellaRenderer، .. mxml.

أمر المكتبات مهم لأنه يجب تحميل الفئات الأساسية قبل الطبقات التي تستخدمها.

يمكنك أيضا استخدام ملف التكوين، حيث يظهر المثال التالي:

../libraries/customcellrenderer ../libraries/customdatagrid ../libs/playerglobal.swc ../libraries/customcellrenderer/library.swf ../libraries/customdatagrid/library.swf

خيار المكتبات المشتركة في وقت التشغيل هو الموقع النسبي لملفات Library.swf عند نشر التطبيق. خيار المسار الخارجي للمكتبة هو موقع ملف SWC أو فتح الدليل في وقت الترجمة. لهذا السبب، يجب أن تعرف مواقع نشر المكتبات المتعلقة بالتطبيق عند تجميعها. لا تضطر إلى معرفة هيكل النشر عند إنشاء المكتبة، لأنك تستخدم مترجم سطر الأوامر Compc لإنشاء ملف SWC.

حاول فصل RSLs الخاص بك إلى حججها الخاصة. إليك ما مدى تناوله على بناء بلدي:

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

باستخدام RSL، تذكر تعيين معلمة استخدام شبكة الاستخدام إلى TRUE، وإلا فسوف يشتكي SWF المترجمة خطأ أمان (لا يمكن تحميل RSL) عند تشغيله في موقع مختلف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top