flex-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Baird <mba...@kairyt.com>
Subject Re: Application issues building through Ant
Date Wed, 17 Apr 2013 19:20:48 GMT
Thanks for helping with this, Alex. I think I'm getting a little closer.
I've switched to using mxmlc/compc AntTasks and I can load the main
application and the submodules now.

I have, however, some Flex 3 skin(s) that seem to be failing at runtime.
Unlike before, this happens with the ant-built application as well as the
FlashBuilder-built application. I've attached my skin, which is throwing a
NPE at line 41, implying *parent* is null. I've tried checking for parent
== null and returning, and I also wrapped the whole thing in a try/catch,
but the same error keeps getting thrown.

In dealing with this skin issue, I've tried adding *isolate-styles=false* as
well as *
runtime-shared-library-settings.application-domain
application-domain-target="top-level"
* for all my custom libraries, to no apparent effect.

I generated a link-report for my style resource SWF and it does include a
link to the LinkButtonSkin, so I *think* that's okay.

When compiling the libraries, I do get this interesting warning (it is
repeated for SDK mx.swc and charts.swc), that may or may not be related.
It's coming from the flex-config xml.
    [compc] Warning: The swc
'C:\Apache\Flex\4.9.1\frameworks\libs\framework.swc' has style defaults and
is in the library-path, which means dependencies will be linked in without
the styles.  This can cause applications, which use the output swc, to have
missing skins.  The swc should be put in the external-library-path.

Any thoughts here are much appreciated.


On Tue, Apr 16, 2013 at 8:22 PM, Alex Harui <aharui@adobe.com> wrote:

> From that output, if I'm interpreting it correctly, core.swc loads, then
> common.swc.  Common.swc seems to have a dependency on Button, which hasn't
> been loaded yet since only core has been loaded.
>
> Should common.swc have a dependency on Button?  If so, you will need to
> load
> mx.swc beforehand.  I think the compiler/linker is smart enough not to
> request loading of RSLs that aren't used by the application.  But then if
> your custom RSL needs Button the compiler/linker doesn't know that.
>
>
> On 4/16/13 5:06 PM, "Michael Baird" <mbaird@kairyt.com> wrote:
>
> > 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 <mbaird@kairyt.com>
> 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 <aharui@adobe.com> wrote:
> >>
> >>>
> >>>
> >>>
> >>> On 4/9/13 10:41 AM, "Michael Baird" <mbaird@kairyt.com> 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 <aharui@adobe.com>
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" <mbaird@kairyt.com> 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_disp
> >>> l>>
> >>> 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
> >>>
> >>>
> >>
>
> --
> Alex Harui
> Flex SDK Team
> Adobe Systems, Inc.
> http://blogs.adobe.com/aharui
>
>

Mime
  • Unnamed multipart/mixed (inline, None, 0 bytes)
View raw message