I've analyzed the link-report and also checked out the catalog XML.
The main library, which gets compiled as core.swc and then treated as an
external-library (+ rsl) by all the other targets, has a catalog.xml that
contains references to mx.controls:Button. I had the main application
target generate a link-report and that also contains references to the
mx.controls:Button class.
So the linkage "appears" to be correct according to these reports.
I tried to change the main application target to use
-library-path+=core.swc instead of -external-library-path, but that
resulted in no change.
Fun fact: I added a custom debug config to FlashBuilder and launched the
application. Here's the console result:
[SWF] C:\<path>\oneplace_client.swf - 1,869,468 bytes after decompression
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
Loading library
[SWF] /core.swf - 1,612,732 bytes after decompression
Loading library
Loaded library 0 of 5
Loading library
[SWF] /common.swf - 1,203,976 bytes after decompression
VerifyError: Error #1014: Class mx.controls::Button could not be found.
Could I be missing a step to generate a valid RSL for the libraries (e.g.
addressing the *VerifyError*)? Here is my *core* library target:
<java jar="${compc.jar.path}"
failonerror="true"
fork="true">
<jvmarg value="-Xmx512m"/>
<arg value='-debug=${debug}'/>
<arg
value='-local-fonts-snapshot=${FLEX_HOME}/frameworks/localFonts.ser'/>
<arg value='-load-config=${flex.config}'/>
<arg
value='-theme=${FLEX_HOME}/frameworks/themes/Halo/halo.swc'/>
<arg value='-source-path+=${lib.core}'/>
<arg value='-include-sources=${lib.core}'/>
<arg value='-output=${build.dir}/core.swc'/>
</java>
Then the main application target:
<java jar="${mxmlc.jar.path}"
failonerror="true"
fork="true">
<jvmarg value="-Xmx512m"/>
<arg value='-debug=${debug}'/>
<arg
value='-local-fonts-snapshot=${FLEX_HOME}/frameworks/localFonts.ser'/>
<arg value='-load-config=${flex.config}'/>
<arg
value='-theme=${FLEX_HOME}/frameworks/themes/Halo/halo.swc'/>
<arg value='-runtime-shared-libraries=${core.swf}'/>
<arg value='-external-library-path=${build.dir}/core.swc'/>
<arg value='-runtime-shared-libraries=${common.swf}'/>
<arg value='-external-library-path=${build.dir}/common.swc'/>
<arg
value='-runtime-shared-libraries=${swiz-framework-v1.4.0.swf}'/>
<!-- CampaignWrapper Libs BEGIN -->
<arg value='-runtime-shared-libraries=${campaign_common.swf}'/>
<arg
value='-external-library-path+=${build.dir}/campaign_common.swc'/>
<arg value='-runtime-shared-libraries=${synchronization.swf}'/>
<arg
value='-external-library-path=${build.dir}/synchronization.swc'/>
<arg value='-source-path+=${lib.campaign}'/>
<!-- CampaignWrapper Libs END -->
<arg value='-file-specs=${app.main}/${client.name}.mxml'/>
<arg value='-output=${build.dir}/${client.name}.swf'/>
<arg value='-link-report=${build.dir}/report.xml'/>
</java>
(Note: those are all custom SWCs I'm treating as RSLs/external-libraries.
The Flex ones are loaded - or supposed to be loaded - through the
-load-config argument.)
Any further ideas are greatly appreciated!
On Tue, Apr 9, 2013 at 12:22 PM, Michael Baird <[email protected]> wrote:
> I'll check out the link-report and see what's going on. The main
> application MXML target is generating one, which is used for the modules
> through load-externs.
>
> The externals indicated by the module target I provided are some of our
> common libraries that are built as SWCs earlier in the script. The Flex
> ones are only included through flex-config.
> e.g.
> <java jar="${compc.jar.path}"
> failonerror="true"
> fork="true">
> <jvmarg value="-Xmx512m"/>
> <arg value='-debug=${debug}'/>
> <arg
> value='-local-fonts-snapshot=${FLEX_HOME}/frameworks/localFonts.ser'/>
> <arg
> value='-load-config=${FLEX_HOME}/frameworks/flex-config.xml'/>
> <arg
> value='-theme=${FLEX_HOME}/frameworks/themes/Halo/halo.swc'/>
> <arg value='-external-library-path+=${build.dir}/core.swc'/>
> <arg value='-runtime-shared-libraries=${core.swf}'/>
> <arg value='-source-path+=${lib.common}'/>
> <arg value='-include-sources=${lib.common}'/>
> <arg value='-output=${build.dir}/common.swc'/>
> </java>
>
> (core being another of our libraries)
>
>
> On Tue, Apr 9, 2013 at 12:12 PM, Alex Harui <[email protected]> wrote:
>
>>
>>
>>
>> On 4/9/13 10:41 AM, "Michael Baird" <[email protected]> wrote:
>>
>> > Okay, I understand the Sprite issue might be something wrong with our
>> > resource builder (yes, embedded assets and css compiled into a resource
>> SWF
>> > so I'll look for misconfigurations there).
>> >
>> > Shouldnt mx.controls.Button be included through the standard
>> flex-config or
>> > is that getting messed up because of the module externals?
>> Flex-config directs compile-time. It must be "ok" since you are getting
>> SWFs and then run-time errors. It is options like -external-library-path
>> that cause the linker to exclude classes, which is what you want, but then
>> you have to make sure they get loaded and loaded correctly.
>> >
>> > Do you happen to know what/how this changed from 4.1 to now? This same
>> > build script is working with SDK 4.1.0.
>> I don't know off-hand. It is possible that we got better at not requiring
>> mx components in spark apps. A link-report will tell you what classes are
>> ending up where.
>>
>> BTW, did you obfuscate the SWC names? I don't recognize common and
>> charting
>> as Flex SWCs. If you custom built these SWCs then there might be an issue
>> with what classes are in it. A SWC is a zip file and in it is a
>> catalog.xml
>> which is like a link-report: it tells you which classes are in the SWC.
>> >
>> >
>> > On Mon, Apr 8, 2013 at 9:16 PM, Alex Harui <[email protected]> wrote:
>> >
>> >> The -external-library-path options are forcing certain classes to not
>> be
>> >> linked into the SWF, but those classes are not being loaded into the
>> >> ApplicationDomain tree in a way that SWF can access it or aren't being
>> >> loaded at all.
>> >>
>> >> The XXXX_flash.display_Sprite class is probably an embedded asset and
>> not
>> >> an
>> >> actual Flash Player class.
>> >>
>> >>
>> >> On 4/8/13 5:41 PM, "Michael Baird" <[email protected]> wrote:
>> >>
>> >>> I have a large application with multiple shared libraries and
>> sub-modules
>> >>> that I'm trying to build through Ant and I'm running into issues...
>> >> hoping
>> >>> someone here can help.
>> >>>
>> >>> I'm currently targeting the latest AF release - 4.9.1 - and running
>> into
>> >> an
>> >>> issue where when I launch the Ant-built application, I receive one
>> Flash
>> >>> exception:
>> >>> VerifyError: Error #1014: Class mx.controls::Button could not be
>> found.
>> >>> then another:
>> >>> ReferenceError: Error #1065: Variable
>> >>>
>> >>
>>
>> _88d866d22da27af4b5978eeb7ebb39d5d661776417e03b75890d49335a9fed4d_flash_displ>>
>> a
>> >>> y_Sprite
>> >>> is not defined.
>> >>>
>> >>> This seems to indicate that the Flash player is not being included
>> >> somehow
>> >>> but I can't figure out why!
>> >>>
>> >>> Here is an example of one of my module targets:
>> >>> <target name="dashboard"
>> >>> depends="client">
>> >>> <java jar="${mxmlc.jar.path}"
>> >>> failonerror="true"
>> >>> fork="true">
>> >>> <jvmarg value="-Xmx512m"/>
>> >>> <arg value='-debug=${debug}'/>
>> >>> <arg
>> >>> value='-local-fonts-snapshot=${FLEX_HOME}/frameworks/localFonts.ser'/>
>> >>> <arg
>> >>> value='-load-config=${FLEX_HOME}/frameworks/flex-config.xml'/>
>> >>> <arg
>> >>> value='-theme=${FLEX_HOME}/frameworks/themes/Halo/halo.swc'/>
>> >>> <arg value='-source-path+=${lib.dashboard}'/>
>> >>> <arg value='-runtime-shared-libraries=${core.swf}'/>
>> >>> <arg
>> value='-external-library-path=${build.dir}/core.swc'/>
>> >>> <arg value='-runtime-shared-libraries=${common.swf}'/>
>> >>> <arg
>> value='-external-library-path=${build.dir}/common.swc'/>
>> >>> <arg value='-runtime-shared-libraries=${charting.swf}'/>
>> >>> <arg
>> >> value='-external-library-path=${build.dir}/charting.swc'/>
>> >>> <arg
>> >>> value='-file-specs=${lib.dashboard}/${view.dir}/DashboardView.mxml'/>
>> >>> <arg
>> >>> value='-output=${build.dir}/${view.dir}/DashboardView.swf'/>
>> >>> <arg value='-load-externs=${build.dir}/report.xml'/>
>> >>> </java>
>> >>> </target>
>> >>>
>> >>> FLEX_HOME is defined earlier in the build script as the path to the
>> 4.9.1
>> >>> base directory.
>> >>>
>> >>> I have also tried using anttasks, and that is working a little better
>> >>> except when I load a module with charts - then I get another missing
>> >> class:
>> >>> VerifyError: Error #1014: Class mx.charts::CategoryAxis could not be
>> >> found.
>> >>>
>> >>> So overall it seems like I'm having linking issues, but I'm using
>> stock
>> >>> flex-configs that look like they are including the right libraries in
>> the
>> >>> right places.
>> >>>
>> >>> Any help is appreciate... thanks =)
>> >>
>> >> --
>> >> Alex Harui
>> >> Flex SDK Team
>> >> Adobe Systems, Inc.
>> >> http://blogs.adobe.com/aharui
>> >>
>> >>
>>
>> --
>> Alex Harui
>> Flex SDK Team
>> Adobe Systems, Inc.
>> http://blogs.adobe.com/aharui
>>
>>
>