Using Flash components into Flex application - apache-flex

What is the right way for integrating a Flash component into a Flex application?
I heard that there are different ways of integration between Flash and Flex: using SWF, using SWC (something else?). What are theirs pros and cons?
What are the points of communication between them Flash and Flex?
I'm using Flash Builder 4 for developing Flex. And Flash Professional CS 5 for developing Flash.

Typically, I use flash (professional) to develop customized graphics and movieClips. I turn those into Flex Components (by having them extend mx.flash.UIMovieClip) and export a SWC file. Each element in my flash (professional) library that has an instance name is now available to Flex in that SWC (after I put the SWC in the /lib directory of my project).
I'm considering moving over to FlashCatalyst for this kind of stuff and reserving Flash Professional for when I need to do customized animations.
Mainly, because flash is buggy, at times. Which is not something I would mind as much if it weren't for the fact that flash also does an AWFUL job of displaying error information. Right now, for example, I'm authoring some flash components and it keeps deleting all my actionscript from the file! That makes all my movieclip objects play in an infinite loop (because all the stop() calls are deleted!)
It's annoying.

Related

How big should a Flex SWF be?

I've a fairly small Flex4 project targeting Flash 10, developed in FlashDevelop. I know Flex SWFs carry extra overheads to a plain AS3 project, but 240Kb for release build seems still a lot - is it? Or is this a realistic minimum?
In case it's relevant, FlashDevelop builds my project with the following (anonymized):
mxmlc -load-config+=obj\********.xml -incremental=true -benchmark=false -optimize=true -static-link-runtime-shared-libraries=true -o obj\*****************
Doesn't Flash player include Flex runtimes or something sensible like that?
The player does not include the Flex framework. It shouldn't. The Flex framework is independent of the player and if it was included the player would have to include every version of the framework to use the one each swf was built against. To solve this the framework is different (as is the Flash framework).
The resolution to large swfs is to use Framework Runtime Shared Libraries. This way the player will load a shared library swf once for the specific framework version you used and this shared library will be used across all swfs that were compiled against the same framework version.
You can find more information here:
http://livedocs.adobe.com/flex/3/html/help.html?content=rsl_09.html
In practice, it's somewhat like having the framework in the player, but it's just not pre-loaded. The frameworks get loaded as needed.
240KB is not a lot. Yet.
However, in my opinion, Flex does make files quite large when you start developing bigger applications, which is the reason I do plain ActionScript projects.
Flash Player does not come with preloaded framework data in. Therefore, 1) do what sam said with Runtime libraries. 2) load almost all files after the main flash has loaded, thus giving the user meaningful info, while the rest loads (you could load homepage, display it, and only then start loading the other sections). You could use something nice called BulkLoader.
hth

Flex SDK or Adobe Flash?

I am looking to get into Flash game development (coming from XNA), but I'm not so sure I'm willing to dish out for the pricey Adobe Flash software. I've noticed there is the free "Flex" SDK.
What's the difference? Would I be able to develop a Flash game using the free Flex SDK and submit it to a game portal in the same way I would, if I had developed a Flash game using Adobe Flash?
If you use Windows, FlashDevelop may be an option. It is free and open source.
I believe you can use it in conjunction with the compiler that comes free with the Flex SDK from Adobe, also to compile ActionScript projects that doesn't include the Flex component framework, in other words, to develop stuff like games and such, in pure ActionScript, rather than Flex based RIA's.
There are 3 different things here, I think.
The platform in itself : the flex sdk is a compiler that targets the flash player, and is perfect for game development, and you won't have any problem to submit a game developped this way.
The IDE : If you are a programmer you'll be disappointed by Flash Professional, which is clearly aimed at graphists. That leaves you with 4 main options : Flash Builder, the IDE offered by Adobe, FDT, developped by PowerFlasher, FlashDevelop which is free and open-source, and IntelliJ which now has decent AS3 support. Or, you can of course develop in any text-editor and compile with the Flex SDK
The framework : for game development, you probably don't want to use the flex framework, which is rather heavy and won' bring much in terms of functionnality.
There are a number of confusing* terms surrounding your question:
Flash - An interactive content development tool that has lots of vector drawing and animation capabilities, can incorporate interactive elements programmed in ActionScript, and publishes to SWF files.
Flash Player - A browser plugin that runs SWF files.
Flex - A framework for developing rich internet applications by programming in ActionScript and laying out UI in MXML.
Flex SDK - A set of freely downloadable compilers for ActionScript and MXML that generate SWF files.
Flash Builder (formerly Flex Builder) - An IDE sold by Adobe for programming ActionScript code.
Flash Develop - An open source IDE for programming ActionScript.
Long story short, a "Flash game" is a SWF file that runs in the Flash Player.
*Most of the confusion is because Adobe purposely made the terms confusing. Part of the problem is that they occasionally change things, like when they renamed Flex Builder to Flash Builder or when they changed Flex SDK from an IDE to the underlying compilers (and actually I'm not even entirely clear about that last one.)
I have used FlashDevelop earlier..
FD IDE great for AS3 developement..
Even they support Haxe which is one more open source programming language..
You can compile a Haxe program to a .swf file. Haxe can compile for Flash Players 6 to 10.
http://haxe.org/doc/intro
I think you should try Haxe and you will love using the FlashDevelop IDE as well.
You can:
1) use Flex SDK to compile pure AS3 code, which is convenient. It helps organizing your code and debugging, unlike Flash CS.
2) if you are making a game that involves a lot of drag'n'drop, GUI manipulations and so on, I would recommend the Flex Framework.
I have seen flex used well for games, altough it requires a bit more ground work in terms of sprite and cast organisation. Making games even in flash mx and 2004 was an absolute breaze, it really depends on the nature and complexity of the game, I find making games a little easier in the old flash 8 workflow, if we are talking cheezy pop cap games, but I have seen many casino's do perfectly decent work in flex on gaming engines.
As someone who also comes from a heavy MS dev background having gui dev tools is a plus once you have used RAD Tools you will never go back to linux style text editing and tools.
Flash Builder (flex 4) is a very very nice tool compable to visual studio in allot of ways.
Altough if I were to describe Flex Builder the workflow is identical to VB 6 its like VB for the web, except instead of vbscript you got a full oop language instead.
I would recommend using it (even in 60 day trial) I would recommend it.
I have seen some very good flex game engines even a port of quake 2, so depending on how sexy you want to get it can handle very well.
I know am replying late to this question, But just wanted to add my view on Flex 4.6,
Its wort upgrading to Flash builder 4.6 where mobile development on Blackberry, Android and IOS is supported. Its much simpler to develop and build applications for mobiles using Flash builder 4.6.
You can also refer to
http://www.adobe.com/devnet/flash-builder/articles/whatsnew-flashbuilder-46.html
http://www.adobe.com/products/flash-builder/features.html
Flex isn't really for games. It's more for RIA (Rich Internet Application), which isn't really the same thing.
You can program against the Flex SDK itself, and it's free, but you'll be 1/10 as productive than if you use Flash Builder. It does a whole lot for you. But, anyway, I think you should look into Flash development - not necessarily Flex.

What are Adobe Flex, Flash, ActionScript and their relationship to each other, if any?

This is obviously a rookie question about Adobe technologies, but I am seeking a canonical answer to help me understand the adobe development stack.
Flash was the original platform, but also refers to the development tool for building timeline-based animations. This program was geared initially towards animators and artists more than programmers. Actionscript is Flash's programming language. There are 3 versions - Actionscript 1 was rudimentary and is fairly obsolete. Actionscript 2 was built on AS1 and was used commonly. Actionscript 3 was a complete overhaul of the language to make it ECMAscript compatible. AS1/2 and AS3 are not compatible at all - the Flash Player Plugin that browsers use to display flash either use the AS1/2 virtual machine or the new AS3 virtual machine. The rewrite of AS3 along with the new VM was meant to increase performance and create a more substantial programming language.
Flash's main format that is exported for display onto the web is the .SWF file (usually along with HTML as well).
Flex Builder is another way to author, and is geared completely towards developer. Rather than having drawing tools and a timeline to control animation, Flex Builder is more of an IDE for building Flash-based applications. Flex Builder includes pre-built UI and data features that are not available in the Flash authoring program. However, the end product of Flex Builder is ultimately .SWF files (along with relevant HTML).
I believe the confusion that the two different names (Flex and Flash) have created has guided Adobe in renaming Flex Builder to Flash Builder in the present version. Just two ways to create the same types of files - either more on the visual/animation/artistic side or on the programming/application side.
Adobe Flash is the runtime that Flash application run in.
Adobe Flex is a framework to make Flash application development easier for developers (rather than traditional Flash applications/animations/movies that are produced by graphic design/animation folks).
ActionScript is the scripting language for Flash. You can use it with both Flash and Flex.

Can i use flex without Flex builder?

i am starting to study FLEX. i have only flex sdk. So can i start study only using that. If so please suggest me the link to go through..
But still, Using an editor will minimize our work and will create the code by its own. So as a new learner it would be tedious to understand and also hard to learn new things...
Yes.
Just a bit of background: Flex Builder (a.k.a Flash Builder), the mxmlc compiler (free) and Flash CSx all compile Actionscript code into SWF files and/or AIR files. Flash CSx is a design-centric tool with a ultra-simplistic coding editor built in (not much more useful than Notepad); Flex Builder/Flash Builder is a full-blown programmer's IDE (based on Eclipse); the mxmlc compiler is a free command-line tool that compiles Actionscript files into SWF and AIR files. (You have to use your own editor to write the source files.)
MXML is an xml language that acts as a shortcut for Actionscript. You can code in mxml instead of Actionscript and the compiler will convert your mxml into Actionscript before compiling. You can't use mxml as a shorthand for all AS coding. Mostly you can use it as a substitute for UI coding and as a way of binding data to UI elements. The compiler converts the mxml into Actionscript classes and then compiles the Actionscript classes (the ones created as mxml and the ones coded natively in Actionscript) into bytecode. The Flash virtual machine (e.g. the browser plugin) runs the bytecode.
Currently, you can code both Actionscript and mxml -- and then compile using Flex Builder/Flash Builder or the mxmlc compiler (which is free). Flash CSx can does not understand mxml, so you it can only compile straight-forward Actionscript.
Note: there are third-party tools, such as FDT that can also be used to write and compile Actionscript and mxml.
The language Actionscript has been revised several times. After a brief phase when it was a proprietary language, it morphed into something much like Javascript. Then, with AS 2.0, it became much more like Java -- and it continues in this direction with AS 3.0. (its syntax is very similar to Java and, like Java, it is class-based).
There are a core set of Actionscript classes that are available to you in Flash CSx, Flex Builder/Flash Builder and the free sdk. There are additional classes, known as the Flex Framework, which are available to you in Flex Builder/Flash Builder and in the sdk -- but not in Flash CSx. These extra classes add new visual components, such as a datagrid, an advanced UI-layout engine, and a framework for data-binding.
You can use the Flex Framework without the Flex Builder IDE (which is going to renamed, in the next version to Flash Builder).
Compiling without Flex Builder
You can also use Flex Builder/Flash Builder without using the Flex Framework -- meaning you can program in the IDE and use only Actionscript classes that aren't part of the framework (the classes you'd use if you programmed in Flash and not Flex Builder).
You can choose to use or not use mxml.
You can even use mxml to auto-generate Actionscript that's not part of the Flex Framework (e.g. your own custom classes).
Using mxml for your own classes
Good luck!
my Actionscript blog
If you are a student, you can get Flex Builder for free.
Free for students
I like FlashDevelop # http://www.flashdevelop.org/
Open source editor for Adobe Flash/Flex for Windows (may work under Wine?).
You can certainly build application with solely the open source Flex SDK. I have posted some instructions for using only the Flex SDK on Linux. If you are on a different platform the instructions can be slightly adjusted.
Yes, you can use any text editor to write MXML and ActionScript code, and then use the command line to compile the code into a SWF (Flash Movie). The SDK does not include Charts, however.
http://opensource.adobe.com/wiki/display/flexsdk/Downloads
If you're on Windows, see if you can run mxmlc.exe (the compiler) from a command prompt. Create a simple Example.mxml file to test it out.
mxmlc.exe Example.mxml
Here's a simple Hello World mxml source code.
Easy steps are well documented on Adobe's site and in chapter 2 of "Flex 3 in Action"
Flex Builder (now Flash Builder) is based on the Eclipse IDE - it's actually a plugin to Eclipse. So with Eclipse being open source and free, you can use that as your editor.
You won't get the integrated debugger, and visual design view... but using some free plugins you can still be productive.
1) You'll need the Flex SDK: www.adobe.com/products/flex/flexdownloads/
2) Get Eclipse: eclipse.org/
3) Two notable Eclipse plugins:
- www.eclipse.org/webtools/
- www.aptana.com/studio
Alternatively, if you have MSFT's Visual Studio, there's a Flex plugin for that too:
- www.sapphiresteel.com/Adobe-Flex-Development-in-Visual
To compile your code you'll use the Flex compiler, information on how to use it can be found here:
www.adobe.com/livedocs/flex/3/html/compilers_13.html#150640
Chapter 2 of Flex 3 In Action also has a section on how to develop Flex applications without Flex Builder:
http://www.amazon.com/dp/1933988746/?tag=insidemark-20
Note that Flex Builder is free for academic faculty, students, and out of work coders. So that's another option.
Cheers.
Flex Builder will be the very best way to learn as its got a debugger and thus lets you step thru code see how it works. FlashDevelop is free tho it lacks a debugger - still very useful
Intellij actually has pretty good support. AS3 support is wonderful, but there is no WYSIWYG tool.
Still, it is not a problem for many programmers, as MXML is easy to read and edit without WYSIWYG.

What is Adobe Flex? Is it just Flash II?

Question
Alright, I'm confused by all the buzzwords and press release bingo going on.
What is the relationship between flash and flex:
Replace flash (not really compatible)
Enhance flash
The next version of flash but still basically compatible
Separate technology altogether
???
If I'm starting out in Flash now, should I just skip to Flex?
Follow up
Ok, so what I'm hearing is that there's three different parts to the puzzle:
Flash
The graphical editor used to make "Flash Movies", ie it's an IDE that focuses on the visual aspect of "Flash" (Officially Flash CS3?)
The official name for the display plugins (ie, "Download Flash Now!")
A general reference to the entire technology stack
In terms of the editor, it's a linear timeline based editor, best used for animations with complex interactivity.
Actionscript
The "Flash" programming language
Flex
An Adobe Flash IDE that focuses on the coding/programming aspect of "Flash" (Flex Builder?)
A Flash library that enhances Flash and makes it easier to program for (Flex SDK?)
Is not bound to a timeline (as the Flash IDE is) and so "standard" applications are more easily accomplished.
Is this correct?
-Adam
The term Flash can include any of the other terms defined below, and I find that saying "Flash" without specifying exactly what you mean can be confusing and misleading. Case in point: I'm not sure what you specifically mean when you say "Flash" in your question. Is it Flash Player? The authoring tool? Or the whole collection of technologies that fall under what Adobe calls the "Flash Platform"? To help clear all this up, let me define the technologies involved in creating Flash and Flex content so that we're all using the same terminology here:
Flash Player is a runtime for rich media content in the browser. There is also Flash Lite to run Flash content on older or low-end mobile devices, and Adobe AIR extends Flash Player to allow content authors to publish native desktop and mobile applications that can integrate with things like the file system, windowing systems, and device sensors like the accelerometer and camera. Collectively, Adobe refers to these as the Flash runtimes.
Flash Professional (often called the Flash authoring tool or the Flash IDE) has traditionally been the primary application used to create content that runs on Flash Player. It is very designer oriented with timelines, layers, and visual drawing tools. Software developers may find this application disorienting and limited compared to other development tools that focus more on code, like Flash Builder (see below). When someone says, "I built something with Flash", they often mean the Flash authoring tool, but that's not always the case. For that reason, it's good to always clarify to avoid any confusion.
ActionScript is the primary programming language supported by Adobe to target Flash runtimes. The current version is ActionScript 3 (abbreviated as AS3), which has been supported since Flash Player 9. Content created with older versions of ActionScript can still be run in the latest versions Flash Player, but new features are only supported when using ActionScript 3 to create new content.
Flex is a collection of technologies designed to create rich applications that target the Adobe's Flash runtimes. Though saying "Flex" previously had the same ambiguity as "Flash", the Flex brand name is becoming more and more focused on the Flex framework and SDK, described below.
The Flex SDK consists of compilers, a command-line debugger, and the Flex framework. The included compilers are:
1. MXMLC, an ActionScript and MXML compiler to output the final SWF file for deployment to Flash Player.
2. COMPC, a static library compiler for ActionScript that outputs SWC files.
3. ASDOC, a documentation generator built on the compiler technology.
The Flex framework is a collection of ActionScript classes designed to build Rich Internet Applications. It includes things like user interface controls, web services and other connectivity classes, formatters and validators, drag and drop, modal windowing, and component states. These classes are in the mx.* package. Generally, when developers say "Flex" without any clarifying information, they mean the Flex framework and not the product formerly known as Flex Builder.
In 2011, Adobe donated the Flex SDK to the Apache Software Foundation. It is now called Apache Flex and it is fully managed by the community rather than Adobe. However, Adobe employees continue to contribute to the project, and Flash Builder (see below) continues to support new SDKs released by the Apache Flex project.
MXML is an XML-based markup language used by the Flex compilers to make layout and placing components into containers easier. The tree-like structure of XML make the containment hierarchy easier to visualize. MXML is actually converted to ActionScript during the compilation process.
Flash Builder (formerly known as Flex Builder) is a development environment that allows developers to build different project types to create SWF files that are deployed to Flash runtimes. It is built on the Eclipse platform and is more familiar to software engineers. Flash Builder supports projects built with Flex or pure ActionScript. Flex projects include the Flex framework. ActionScript projects are the most basic you can work with, starting with a single class and an empty canvas, and the Flex framework is not included.
Flash Builder does not replace Flash Professional. Some people who have traditionally used Flash Professional may now choose to use Flash Builder instead. Often, these are software engineers who appreciate or require the advanced development tools offered by Flash Builder or don't work heavily with assets designed in a visual tool. Some developers may write their code in Flash Builder, while choosing to compile their projects in the Flash authoring tool. Often, these developers are also designers, or they are working with other people who are designers. In this situation, there may be many graphical assets created in the Flash authoring tool, and it could be difficult or simply inappropriate to bring them into another environment.
The Flex framework is specifically designed to build applications. It includes many traditional form controls (buttons, lists, datagrids, etc) and much of the code runs on an advanced component framework written in ActionScript. Not everyone is building the sort of content that Flex is designed to create, and Flex does not replace traditional Flash development practices for everyone. It is a better approach for some developers, but may not be right for others. More design-heavy websites, such as those created for movies, music, energy drinks, advertising campaigns, and things like that probably shouldn't use the Flex framework. These types of content might be better suited to Flash Professional or a pure ActionScript project in Flash Builder. Similarly, little widgets you put into the sidebar of your website or on your profile in a social networking website may need to be built with pure ActionScript (without the Flex framework) because they require a smaller file size and they probably don't need a big complex component architecture designed for larger applications. When targeting Flash runtimes, your development environment, frameworks, and workflow should be chosen based on your project's requirements and goals.
Adobe Flex Builder is Adobe's IDE for developing applications that will run in the Flash plugin. The Flex SDK refers to the libraries that developers uses to write the applications.
Essentially, the term 'Flex' is the development side and 'Flash' is the run time side of Adobe's technology.
Correction: The term 'Flash' is also used to refer to the Flash IDE which designers use.
Yeah, I was confused by this for quite a while too.
Flex seems to be thier name for the 'Flex Builder' IDE (based on Eclipse), and the general approach of building flash files using mxml and ActionScript rather than the normal flash tools.
I think the mxml and ActionScript approach (i.e. Flex) is designed to appeal much more to programmers, where as the Flash side is designed more to appeal to graphic designers.
The end result of either approach is a .swf file which can be run in the browser's flash player plugin (although with Flex you can target the Adobe Air runtime instead if you want access to the file system and to run offline etc).
My advice would be, if you're coming from a programming background, to start with Flex.
What is the difference between Flex and Flash?
The way I keep it clear in my mind and explain it to others is as follows:
Choose the right tool for what you want to create.
If you want to write an APPLICATION using Flash technology, use Flex.
If you want to create an ANIMATION using Flash techology, use traditional Flash.
Flex is optimized for application construction (but you can create primitive animations using states) and it compiles into a SWF.
Flash is optimized for animation construction but you can also create applications with some extra work, and it compiles into a SWF.
Once you have your SWF you can play in your Flash player, although Flex requires Flash 9 or higher.
In conclusion
Application -> Flex -> SWF
Animation-> Flash -> SWF
Hope this helps.
Part of the confusion is that "Flash" means multiple things. Flash can mean one of a multitude of applications, OR the general technology behind SWFs.
There's the Flash CS3 product that Adobe sells. This is generally targeted at designers and uses a Timeline-based approach to creating SWFs. Previously the Flash product was the only way to create SWFs, and SWFs generally were just used for animations and other visual effects not possible in a browser otherwise.
Then there's the Flash Player. This is the application/plugin used to run SWFs. SWFs can also be wrapped in a "Projector" which allows them to run as a standalone app, but that's not as common.
At some point (I don't know when) Flash started to be used for more interactive applications. The Flash product wasn't very well suited for kind of work, as it was designed to create animations. Recognizing this, Macromedia created Flex. Flex is another development environment for creating SWFs, but it targeted more at developers than designers. The latest version is Flex 3. The Flex SDK is freely available and includes a command line compiler, debugger, and the class libraries. Adobe also provides (for purchase) the Flex Builder app, an Eclipse-based IDE for creating SWFs using Flex. There are some free IDEs for using Flex, most notably FlashDevelop, though I don't know of any that provide a visual designer for MXML, the markup language used by Flex to define UIs, or a visual wrapper for the debugger.
If you're approaching Flash from a developer's perspective then you're going to want to use Flex. It's probably a lot closer to what you're used to dealing with, and seems to be the direction Adobe is pushing Flash in general.
Flash is a Runtime Environment - you use the Flash Authoring tool to make some Flash content, and the Flash player processes your content, executes the scripts, and draws the appropriate pictures onto the screen.
Flex is a Development Framework - you use the Flex development tools to define how your component-based content should work, and then Flex generates the Flash content for you. You could have made the same thing with the Flash Authoring tools, but using Flex may let you avoid reinventing some wheels.
In functional terms, Flash is an extremely versatile runtime; it gives you lots of freedom to do anything you want. But if you're building a loan simulator, you probably don't need the freedom to define precisely how all the pulldown menus and screen transitions work. Probably you'd rather that you could just use premade components for that stuff so you can concentrate on the loan stuff. Flex lets you do that, with the cost that it may turn out to be a lot of work if you decide that you do need a lot of freedom to change all the fine details.
Here's another simple view based on how you describe an application you want to develop.
Do you want it to have the highly granular UI capabilities you expect from a workstation (e.g. Windows) application, with a fairly complete set of controls (listbox, combobox, grid, etc.)?
Flex gives you that.
Do you want to deliver it to run in most browsers (i.e. anywhere Flash is installed/installable)?
Flex gives you that, because it runs in the Flash virtual machine.
Do you also want to be able to offer it to run in the OS, not in a browser (with minimal coding changes?)
Flex can give you that, by allowing you run it, not in the Flash VM, but instead in the Adobe AIR VM (which has versions for Windows, Mac, and Linux) which provides wrappers for common OS resources like the filesystem, OS dialog-box UI components (e.g. "Open/File/ etc.)
Are you OK using javascript as the development language? You need to be, because it's the only language supported, in the form of ActionScript, which is a proper superset of javascript - it accepts javascript code directly.
So the partioned pieces are:
A runtime environment, either the Flash browser plugin, or the AIR runtime (the native OS equivalent).
Actionscript as the development language.
A bunch of libraries of controls and other resources, i.e. the typical Window, Frame, Combobox, Listbox, Image container, TextBox, TextArea, a wysiwyg-y RichTextArea, etc.) These are the province of Flex.
With the above resources alone, you can use the free command-line compiler to build applications in the same fashion as you would with any other command-line-compiler language with libraries.
Then, if you want a fancy IDE, there's Flex Builder, which is a set of extensions to good-ol' Eclipse (for several hundred $$). Or there are several other IDE's that are more or less equivalent.
Flex is a framework FlexBuilder is an IDE
(in an attempt to resolve the confusion between the 2, adobe is renaming FlexBuilder to FlashBuilder)
if you do not know what a Framework is:
Flex is to Flash as what CodeIgniter is to PHP
or like what .net is.
I like to think of a framework as extending a language like you would extend a class in OOP.
Flex is a development framework that compiles xml and actionscript into a SWF, which runs on a client machine accessing a website. It can also run as a desktop application using Adobe AIR. Flash uses a drawing canvas instead of xml. Compiled SWFs can be referred to as Flash, which adds to the confusion. You may find Flex similar to ASP.NET, which takes xml and c# (vb.net, etc) and compiles into a dll. Of course, ASP.NET runs on the web server.
If you are choosing between Flex and Flash for an application, consider whether the application will be based around data. If you want to make a pretty spreadsheet application, Flex would be the way to go. If you are creating a video game or some sort of presentation, you would probably want Flash.
Following up on this, I found a very useful article on the subject:
Adobe Flash and Flex—Which Makes the Most Sense for Your Project?
The Flash Integrated Development
Environment (IDE), otherwise known in
its current version as Flash CS3, is
an ideal tool for developing character
animation or linear animation
projects. These are projects that
require little coding and can be
effectively implemented with the Flash
IDE timeline.
In other words, Flash CS4 is very tightly bound to the timeline - good for linear sequences or animations. While one can add loops and interactivity in the form of jumping to new points on the timeline, it is limiting for projects which cannot easily be mapped out in terms of progression over time.
It is, in simplistic terms, an animation tool with very powerful interactive features - creating and composing new elements on the fly, and jumping around on the timeline allows one to create applications, and the Flash CS4 IDE makes this relatively easy, but it's not a great platform for application style software.
Flex was built as an answer to that - while it makes use of the same elements and exposes the code, it is not bound to a timeline, and has more in common with object oriented programming languages than animation languages.
The Flex Builder IDE includes both the programming IDE, as well as a GUI designer for quickly building interfaces, and a few other tools for developing applications that run on the flash player.
Flex and Flash have different target audiences. Flex is more geared towards developers where as Flash is more geared towards designers and artists.
Flashdeveloper has been mentioned as a free tool to develop flex applications. I just want to add a free tool to design applications (create an MXML file using a designer): designview. It's available directly on the adobe website, it's an air application that is basic but that give the possibility to take a look freely and easily to the possibilities of flex.
Flex is a free and open source framework based on ActionScript to develop SWFs and AIR applications. Flex Builder (now renamed to Flash Builder as of version 4, to avoid the confusion) is a commercial IDE from Adobe to develop SWF/AIR using the flex framework. While flash (CS3) is good for animation related stuff, flex is good for application/ui related stuff. Adobe positions flex as an RIA (Rich Internet Application) framework.
Flex runs on Linux, too, while Flash doesn't.
Flex is kinda Flash CS 4 second edition.
Flex is less graphical, as it separates compiler and IDE, which allows for command line compilation (makefiles, large projects so to say) which allows for alternative IDE's to Flash.
Edit:
Flex lacks some classes that Flash CSX has (e.g. fl.controls), while Flash lacks some classes that Flex has (e.g. mx.controls or mx.alert).
All in all:
You can have your own Flash compiler for free by downloading Flex 4 SDK and FlashDevelop.
But it is no substitute for Flash.
Flash produces much smaller files (e.g. Flash compiles a project to 100 kB while Flex is compiles the same project to 500kB). So Flash is for internet multimedia applications, while Flex is for desktop multimedia applications.
Flex Builder 3 --> Flash Builder 4, even though you use it for Flex. You can also use it for Flash. If you really want to learn about all this stuff, you should just buy a veteran lunch for a day because it will save you MONTHS. Adobe makes some cool products, but is also well-known to be a lazy company, and this leads to extremely poor documentation. Unless you are a fan of "livedocs," which is a term Adobe coined to describe "slow and bloated HTML."
"Adobe Flex is a collection of technologies released by Adobe Systems for the development and deployment of cross platform rich Internet applications based on the proprietary Adobe Flash platform."
Adobe Flex
Flash is a programming language rather similar to JavaScript but with support for static types.
Flex is a flash library that is intended to help people program in Flash on a much higher level.
It may be helpful to some to think about this as Flex over Flash being like MFC over C++.
Flex is basically a language that compiles down to a flash "movie" or "applet", that will run in the Adobe Flash player plugin.
In very simple terms, Flex technology uses MXML to create applications. MXML is analogous to HTML and Flash components is analogous to something like form elements.
MXML basically allows you to specify what Flash components (such as a table, dropdown list, or something custom that you build in Flash) go on an application screen.
This is a very simplified answer, but that's how I tend to explain Flex.
(Flex Builder is an environment for you to develop Flex apps and Flash apps)
Flex is not a programming language.
flex is a Framework for developing Rich Internet Applications over the Flash runtime and includes ActionScript & MXML as language.
Flex is a collection of Technologies, Tools and Frameworks for building cross platform Rich Internet Applications.
The best answer I've found for "What is Flex" is at this page:
http://www.adobe.com/products/flex/faq.html#flex-flash
Search for "How is Flex different from Flash?"
My interpretation of this is that if your application was generated from Flash Professional, it is a "Flash" application. If it was generated with the Flex SDK (Flash Builder, Flash Develop, or straight code & command line tools) it is a "Flex" application. Both "Flash" applications and "Flex" applications compile into bytecode that can be run by the "Flash Player" or by "Adobe AIR". Both types of applications can include "Actionscript" code.

Resources