Flashhilfe.de - Flash Community

Externe Flex Library als swf Kompilieren mit Flash Builder [Flex 3]

 


AntwortenRegistrieren Seite1  

Sebastian#1
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

05.05.2011, 14:47

Hallo,

ich würde gerne aus einem Library Projekt, eine swf erstellen um sie per Laufzeit nachladen zu können. Per Terminal gelingt mir das mittlerweile auch:

ActionScript:
1mxmlc -target-player=10.0.0 -optimize=true -load-externs=exclude_classes.xml -dump-config=Library_config.xml -static-link-runtime-shared-libraries -o=Library.swf -file-specs=Library/src/MainClass.as -source-path=Library/src -include-libraries=Library/bin/Library.swc -use-network=false


Ergebnis ist eine Library.swf die ich aus meiner Anwendung nachladen und auf dessen Klassen zugreifen kann. Da das Projekt in einem Team entwickelt wird, wäre es aber äußerst ungünstig das nun jeder noch ein Shell bzw. Bash Script in seinem Projekt haben muss um dieses Projekt kompilieren zu können. Ich würde es deswegen gerne über den Flash Builder lösen.
Ich habe dafür die compiler settings bei dem Projekt angegeben. Leider wird mir aber nur eine swc und keine swf erstellt. Die Compiler settings dort werden ja nur angehängt und ersetzen nicht die die der Flash Builder automatisch erstellt. Da dort ein -output oder kurz -o definiert sein wird, wird mein -o leider ignoriert.

Gibt es sonst noch eine Möglichkeit ein swf aus dem Library Projekt zu erstellen ohne dabei ein Shell oder ANT Script anlegen zu müssen?

Viele Grüße,
Sebastian
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
Geändert von Sebastian am 05.05.11 um 14:56 Uhr
Werbung
Beiträge: 0
Registriert: Feb 2016


cedddy#2
Benutzerbild von cedddy
Beiträge: 572
Registriert: May 2007

05.05.2011, 15:21

Ich bin mir nicht ganz sicher aber das hier hört sich passend an

[zitat]
Use the SWC file as an RSL
With a project selected in the Package Explorer, select Project > Properties > Flex Build Path.
Select the Library Path tab, and then select and expand the SWC file entry to display the SWC options.
Double-click the Link Type option. The Library Path Items Options dialog box appears.
Select the Run-time Shared Library (RSL) option.
Enter the URL where the SWC library will reside when the application is deployed.
(Optional) To extract the SWF file in the SWC file when it is placed in the deploy location, select the Automatically Extract SWF to Deployment Path option.
Click OK.
[/zitat]
Adobe
Bitte keine pn´s wegen irgendwelchen fragen zu Threads, dafür gibt es sie ja schließich
Sebastian#3
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

Themenautor/in

05.05.2011, 15:25

Danke ceddy. In dem Fall leider nicht da ich die Library nur bei bedarf nachladen möchte und die Applikation soll diese vorher gar nicht kennen. - zu dem ist noch nicht ab zu sehen wie viele es werden.

Bin jetzt schon fast soweit statt einer externen Library ein externes Module zu laden. - obwohl ich eigentlich keine View habe
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
cedddy#4
Benutzerbild von cedddy
Beiträge: 572
Registriert: May 2007

05.05.2011, 15:33

Haste du dir mal die Adobe seite wo ich´s her hab schon durchgelesen ? Da gibt es unten mehrer fälle die für dich passend anhören. Sonst fällt mir auch nix besseres ein als ANT zu benutzen aber kenne mich auch nicht so gut mit dem Flash Builder aus um da noch mehr zu wissen als Google :D
Bitte keine pn´s wegen irgendwelchen fragen zu Threads, dafür gibt es sie ja schließich
Werbung
Beiträge: 0
Registriert: Feb 2016


willie33#5
Benutzerbild von willie33
Beiträge: 147
Wohnort: Qo'noS
Registriert: Nov 2009

06.05.2011, 22:12

Hi,
ich hab da in meinem PEToolkit eine Klasse, mit der man SWC Dateien zur Laufzeit laden kann.
Link: SWCLoader.as - Source.

Einfach so:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
import at.vy.pet.events.SWCLoaderEvent;
import at.vy.pet.net.SWCLoader;

import flash.net.URLRequest;

var _swcLdr:SWCLoader = new SWCLoader();
_swcLdr.addEventListener(SWCLoaderEvent.AVAILABLE, _swcBereit);
_swcLdr.load(new URLRequest("meineSWC.swc"));

function _swcBereit(e:SWCLoaderEvent):void
{
      trace(_swcLdr.getClassDefinition("at.vy::MeineKlasse"));
}
Loading comments...
Geändert von willie33 am 06.05.11 um 22:15 Uhr
Sebastian#6
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

Themenautor/in

07.05.2011, 12:23

Hallo willie,

das sieht gut aus. Vielen Dank. Fehlt nur noch eine static Methode oder Singelton um von überall drauf zugreifen zu können. Dann ist es ähnlich wie:
ActionScript:
1ApplicationDomain.currentDomain.getDefinition(....);

Oder funktioniert das nicht sowie da Du im LoaderContext die currentDomain angegeben hast?

Eine Frage noch am Rande. Wie bist Du den auf die Benamung der Methode gekommen?
ActionScript:
1protected function _fileLoaded

Unterstrich kenne ich sonst höchstens bei Private Methoden, nicht aber Event-Handler. Mir persönlich gefällt das so ja gar nicht ;-)
Ich würde einen Section-Header mit Event-Handler einfügen und die Methoden dann "fileLoadedHandler", aber das ist wohl nur Geschmacksache.

Grüße,
Sebastian

P.S. eine Native Variante wäre mir trotzdem noch lieber. Falls jemand noch eine Idee hat?
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
willie33#7
Benutzerbild von willie33
Beiträge: 147
Wohnort: Qo'noS
Registriert: Nov 2009

07.05.2011, 14:53

Hey,
danke für das Feedback. Ich habe jetzt die "SWCLoader" Klasse um einige statische Methoden erweitert und eine neue Funktion eingefügt: Eine Liste mit allen Verfügbaren Klassennamen kann abgerufen werden.
SWCLoader.as - Source.

Neue Methoden und Eigenschaften:
ActionScript:
1
2
3
SWCLoader.global:EventDispatcher //Verwendet um global Events zu dispatchen (is ja ein EventDispatcher)
SWCLoader.hasGlobalDefinition(String):Boolean //Beide methoden überprüfen sämtliche vorhandenen SWCLoader instanzen ob so eine Klassendefinition existiert.
SWCLoader.getGlobalDefinition(String):Class


P.S.:Und ich habe mich auch ein bisschen umgesehen und gegoogelt, aber leider keine native Lösung gefunden.
Loading comments...
Geändert von willie33 am 07.05.11 um 15:01 Uhr
Sebastian#8
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

Themenautor/in

10.05.2011, 18:03

Echt schade das es da nichts gibt. Ich habe das ganze nun mit einem ANT Script gelöst.

Dabei funktioniert ein build.xml als meine Bibliothek, aus den jeweiligen Module importiere ich dieses dann nur und greife per Macro-Funktion darauf zu.

Das sieht dann in etwa so aus.

build.xml - Methoden Definition

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<macrodef name="compileLibrary" description="Compile Library">
   <attribute name="library.name" />
   <sequential>
      <xmlproperty file="@{library.name}/.flexLibProperties" />
   
      <!-- compile swc -->
      <compc
         output="libDir/${library.name}.swc"
         include-classes="${flexLibProperties.includeClasses.classEntry(path)}"
         actionscript-file-encoding="UTF-8"
         debug="false"
         verbose-stacktraces="false"
         optimize="true"
         strict="true"
         as3="true"
         >
         <load-config filename="@{library.name}_config.xml"/>
      </compc>
      
      <mxmlc
         file="@{library.name}/src/MainClass.as"
         output="${library.name}.swf"
         actionscript-file-encoding="UTF-8"
         static-link-runtime-shared-libraries="true"
         debug="false"
         verbose-stacktraces="false"
         optimize="true"
         strict="true"
         as3="true"
         >
         <load-config filename="@{library.name}_config.xml"/>            
         <compiler.include-libraries dir="libDir" append="true">
            <include name="${library.name}.swc" />
         </compiler.include-libraries>
      </mxmlc>
   </sequential>
</macrodef>


Im jeweiligen Library Module dann:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
<project name="build_library" basedir="../../path/to/build_xml">
   <property name="library.name" value="FlashhilfeLibrary" />
   
   <import file="${basedir}/build.xml" />
   
   <target name="build_flashhilfe_library" description="compile Library">
      <compileLibrary
         library.name="${library.name}"
         />
   </target>
</project>
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
Geändert von Sebastian am 10.05.11 um 18:08 Uhr

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de