2010-11-01 47 views
5

J'essaye de construire mon projet de flex 4 en utilisant la fourmi. Dans Flash Builder 4, dans les propriétés de projet, il est possible de définir le "Liaison de framework" sur "Fusionné dans le code", "Runtime Shared Library (RSL)" ou "Utiliser SDK par défaut (Runtime Shared library)". Comment puis-je définir l'équivalent en tant qu'options mxmlc dans build.xml?mxmlc et le lien d'infrastructure - comment spécifier le lien comme rsl

Mon build.xml actuelle ressemble à ceci:

<target name="myapp"> 
    <mxmlc 
     file="${PROJECT_ROOT}/myapp.mxml" 
     output="${DEPLOY_DIR}/myapp.swf" 
     actionscript-file-encoding="UTF-8" 
     keep-generated-actionscript="false" 
     warnings="false" optimize="true" incremental="false" > 

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

     <source-path path-element="${FLEX_FRAMEWORKS}"/> 

     <compiler.debug>true</compiler.debug> 

     <runtime-shared-library-path path-element="${FLEX_FRAMEWORKS}/libs/framework.swc"> 
      <url rsl-url="framework_4.0.0.14159.swz"/> 
      <url rsl-url="framework_4.0.0.14159.swf"/> 
     </runtime-shared-library-path>      

     <compiler.source-path path-element="src"/> 

     <!-- List of external libraries --> 
     <compiler.source-path path-element="${MY_LIB}/src" /> 

     <!-- List of SWC files or directories that contain SWC files. --> 
     <compiler.library-path dir="libs" append="true"> 
      <include name="*.swc" /> 
     </compiler.library-path> 

     <copy todir="${DEPLOY_DIR}" file="${FLEX_FRAMEWORKS}/rsls/framework_4.0.0.14159.swz"/> 
     <copy todir="${DEPLOY_DIR}" file="${FLEX_FRAMEWORKS}/rsls/framework_4.0.0.14159.swf"/> 

    </mxmlc> 
</target> 

Je suppose que le réglage de la directive d'exécution-bibliothèque-chemin partagé et la copie du swf-cadre, les fichiers SWZ dans mon dossier cible serait faire fonctionner les choses, mais cela ne semble pas être le cas.

La façon dont j'évalue si cela fonctionne est la suivante: J'utilise un preloader personnalisé, et pour que cela fonctionne, j'ai besoin d'avoir un lien framework comme RSL. Avec "fusionné dans le code", mon preloader est bloqué à un certain point et ne progresse pas vers mon application swf. C'est le même comportement que je vois quand j'utilise le build.xml ci-dessus, ce qui me fait penser que le fichier SWF est en train d'être construit avec un lien de framework fusionné en code (plutôt que lié à RSL).

Une question connexe à ceci est de savoir comment déterminer si mon swf utilise RSL ou non. Je suppose que je pourrais regarder la taille de la sortie compilée. Mais il semble qu'il devrait y avoir un moyen de savoir si j'utilise le fichier de cadre externe ou s'il est intégré dans le fichier SWF d'une manière ou d'une autre, à mon insu.

Répondre

6

Ceci est un peu difficile car la documentation est un peu rare sur ce point. Vous devez probablement définir l'option suivante sur la ligne de commande ou un fichier de configuration.

statique-link-exécution-partagée bibliothèques = false

La documentation d'Adobe donne la description suivante un peu cryptique de ce que fait cette option.

Détermine si les bibliothèques doivent être compilées de manière statique ou si elles utilisent des RSL. Définissez cette option sur true pour ignorer les RSL spécifiés par l'option runtime-shared-library-path. Définissez cette option sur false pour utiliser les RSL. La valeur par défaut est true.

Cette option est utile pour basculer rapidement entre une application liée statiquement et dynamiquement sans avoir à modifier l'option runtime-shared-library-path, qui peut être verbeuse ou modifier les fichiers de configuration.

Voici un lien vers la documentation. "About the application compiler options"

Notez que dans la documentation, la valeur par défaut est true. Cependant, si vous chargez un fichier flex-config.xml (par défaut ou personnalisé), vous devez également vérifier si ce paramètre est présent dans ce fichier et de quoi il s'agit. Dans mon expérience, la valeur par défaut de frameworks/flex-config.xml est en réalité false. Il apparaît cependant que dans l'exemple ci-dessus, cela peut être réglé dans l'autre sens.


(Nous utilisons un système de compilation différent ANT donc je ne suis pas familier avec la syntaxe build.xml dont vous auriez besoin.)

+1

En fait, je triché pour résoudre ce problème. J'ai fini par utiliser [sourcemate] (http://www.elementriver.com/sourcemate) pour exporter mon projet en tant que ant buildfile, puis j'ai pu tout faire fonctionner.C'était beaucoup plus rapide que de déboguer ce que Adobe m'attendait à mettre dans mon dossier! – cybertoast

+2

Justin, je vous donne la bonne réponse parce que c'est dans la bonne direction. L'option réelle est: . Merci. – cybertoast

+0

Cela a résolu mon problème thx, Dans mon cas, en utilisant ant pour exécuter le mxmlc en ligne de commande, j'ai dû ajouter Guian