Flash, Flex, Air, Flashplayer之間的相互關係是什麼?


詳見博客:http://zengrong.net/post/1295.htm

ActionScript
ActionScript通常簡稱為AS,它是Flash平台的語言。AS編寫的程序,最終可以編譯成SWF、SWC。SWF就是我們常說的Flash動畫。但是現在SWF已經不僅僅是動畫,而是RIA的載體。
ActionScript有3個版本,分別是1.0版(AS1),2.0版(AS2)和3.0版(AS3)。只有Flash Player 9及以上播放器才支持AS3編譯的SWF。這三個版本的差別非常大,現在最流行的版本是AS3。


Flex與MXML
因為在開發RIA的時候,需要很多常用的功能,例如控制項(Button,ComboBox,List……)、布局(VGroup、VBox……)等等…… Adobe就開發了一套官方的框架集來實現這些功能,這套框架集就叫做Flex。
為了方便程序員快速編寫RIA程序界面,Adobe又實現了一種基於XML語法的語言MXML,這套語言很像HTML,可以與AS混用,MXML最終也是編譯成SWF或SWC。 Flex框架就是使用AS3與MXML兩種語言寫成的。但說白了,MXML 外加實現了MXML語法,如果你有興趣,也可以自己實現這些。 Flash和Flex,都是用AS編寫,使用swf體現。


Flash
現在Adobe已經將Flash其定義為一個平台(Flash Plantform),包括了Flash IDE、Flash Builder、AIR、Flash Player以及更多。但我們一般講Flash,有兩個意思,一個是指Flash動畫(也就是網頁上擴展名為swf的動畫),另一個就是Flash IDE。
Flash(IDE)從4.0開始進入中國,前期一直在網頁動畫方面告訴發展,多被用來做網頁小廣告(讓你CPU100%的罪魁禍首之一)和MV(showgood三國系列、小小系列、大學自習室……曾經風靡一時啊)。那時的「閃客」,主要是做動畫,即使涉及到編程,也大多是用當時的AS1.0(後來Flash MX 2004升級為AS2.0)寫一點stop、gotoAndPlay之類的東東了。Flash(IDE)發展到8.0版本以後,才開始大量用於編程,當時比較流行的就是「Flash留言本」等等。相關歷史我做了一張圖來表示,括弧里的數字是年份。



Flash Builder/Flex Builder
AS發展到3.0之後,由於其語法和JAVA比較像,再加上增強的性能與強類型,可以完全脫離FLA文件,使用純文本編碼,受到了許多其他程序員(尤其是JAVA程序員)的青睞。由此得以高速發展,用AS開發程序的人也越來越多。AS在視頻網站、遊戲行業發展迅速。但是,Flash IDE雖然是一個很好的動畫製作工具,卻不是一個好的開發工具。於是,Adobe又發布了Flex Builder,一個基於Eclipse的IDE,並發布了Flex SDK,後來又開源了。
有了免費的編譯器,Flex得以快速發展。用Flex Builder也可以開發純AS項目(即所有的文件都是as文件,不包含MXML,也不包含FLA)。一個真正的程序猿,應該更願意使用這種方式吧?Flex Builder從4.0開始,被Adobe改名為Flash Builder。
Flash Builder和Flash IDE不應該放在一起比較,它們不是一類軟體。如果一定要比較一下的話,那麼就是Flash IDE比較偏重於設計一點,用它做動畫比較方便,當然也可以用它編寫AS3程序。用Flash IDE編寫的程序,會有一個FLA源文件,可能還包含多個as文件。Flash Builder偏重於程序,用它可以開發MXML(也就是Flex)項目。也可以用它編寫純AS項目。用Flash Builder編寫的項目,都是純文本文件(.as或者.mxml)。 對於程序流,當然偏愛Flash Builder,而設計流比較偏愛Flash IDE。
當然,IDE並非只有Adobe官方的東西,Flash Develop就是個免費的IDE。如果你願意,用記事本做編輯器也沒什麼不好(比如說zrong就正在嘗試VIM),因為SDK和編譯器都是免費的。


Flash Player
swf動畫需要在網頁上顯示出來,就需要安裝Flash Player。Flash Player的不同版本,其實與Flash IDE也有一定的對應關係(從上圖也能看出來)。但到了AS3時代後,這個對應關係就不那麼明顯了。Flash Player 9是能支持AS3 的最低版本(其實前面還有一個Flash Player 8.5,只是沒普及就升級到9了),後面的Flash Player 都能支持AS3了。關於Flash Player,我寫過一篇有史以來關於Flash Player的最詳細說明,看這個就很清楚了。


AIR
Flash Player 再強大,也是運行在瀏覽器中,受瀏覽器約束。為了擺脫瀏覽器,Adobe又出奇招,發布了AIR。AIR其實就是一個Runtime,你可以把它理解成JVM。有了AIR,就可以用AS3開發桌面軟體,而且開發出的軟體可跨平台運行(這和JAVA的一次編譯,隨處運行不是如出一轍么!)。目前國內的AIR應用主要集中在網站的客戶端方面,例如新浪微博AIR客戶端等。SWF SWC SWZ
SWF
swf是我們見到的最多的Flash平台文件了。是的,它就是Flash平台的最終表現形式。前面說到了,無論是Flex、Flash還是純AS3,最終編譯出來的文件都是swf格式,瀏覽器中的Flash Player插件和獨立的Flash Player,也只能「打開」swf文件進行播放。前面說到的AIR,它的本質也就是運行時+swf而已。
其實並非所有的swf都能直接播放的。swf有3種:

  1. 程序SWF(application swf):可以直接在flash player中運行的swf;
  2. 庫SWF(library swf):swc文件中的library.swf;
  3. 模塊SWF(module swf):Flex Module產生的swf文件。

最終用戶碰到的絕大多數都是「程序SWF」,而程序猿們碰到後面兩種SWF的可能性就比較大。
SWC
SWC是一種庫文件,通常用來發布非開源的類。程序猿們將源碼編譯成SWC文件,並發布API文檔,我們就可以使用這些SWC提供的類庫進行自己的開發。SWC並不是運行時共享的,而是在編譯的時候直接加入了程序SWF中。最終的程序SWF可以脫離SWC運行。
SWC本質就是一個zip文檔,其中包含一個library.swf文件和一個用於描述的xml文件,你可以用zip管理器打開它查看。
SWZ
你可能會發現,從TLF出現以來,Flex SDK中多了一個flashx包,這個包中的功能,就是用SWZ實現的。SWZ是在運行時共享的庫,你可以將其看作一個可以放在外部的SWC。而且SWZ的共享是平台級別的(Moudle SWF的共享是瀏覽器級別),存在於操作系統緩存中(Module SWF的存在瀏覽器緩存),只要下載過一次SWZ,你的操作系統中所有用到這些SWZ中的地方(無論是IE、FF、Chrome還是AIR)都不用重新下載。
對於程序猿,這裡的關於SWC和SWZ的信息肯定是不夠的,所以建議看一下smithfox的swf swc swz RSLs ant,本文的這個部分也是參照它寫成的。


同王磊-Kenshin同學所說

  • Flash

有人理解為一種動畫製作工具,有人理解為用FLASH製作動畫的一整套技術方案,隨便你怎麼理解,反正就是用adobe 的flash工具做動畫。

  • AIR

學過JAVA的話就知道了,類似J2SE,由一整套桌面開發框架和桌面運行環境構成。可以理解為用flash builder/flex敲代碼寫程序,寫出的程序能在桌面系統上跑(windows,linux,mac,android,ios),當然所依賴的系統必須先按照AIR RUNTIME才能運行之前寫的程序,而且程序的API健壯性已經比較接近 原生軟體,而且跨平台性很出色。

  • Flash Player

運行於各種桌面系統(windows,linux,mac,android)上的瀏覽器插件,使得可以在瀏覽器中運行flash程序/動畫(swf文件)。本質上來說,flash player就是解析flash位元組碼的虛擬機,類似JVM


以下內容摘抄自Miller(記錄前端-記錄成長)的博客,查看這裡:http://varnow.org/?p=110

從Adobe的產品範疇來看,Flash和Flex是面向開發人員的工具,開發人員依賴這兩個工具來開發Flash應用程序。而Flash Player與AIR則是Flash的運行環境(runtimes),其中Flash Player主要用於瀏覽器而AIR主要用於桌面程序。

Flash通過可視化的工具以及時間軸來構建應用程序的外觀,並使用ActionScript來做功能性開發。Flex則提供給開發人員一個類庫框架,包括可視化組件以及兩種開發語言:MXML和ActionScript。其中MXML主要用於開發可視化的界面,而ActionScript則用於編寫業務邏輯。

補充
英文介紹視頻:http://www.riameeting.com/node/36


以MFC,WPF為例:
AS3-C/C++-C#-java
Flex SDK-MFC-WPF-swing
Flash/swf-exe/dll-jar
Flex Builder/Flash Pro-VC6/VS2015-Eclipse
Air-MFC Extended-???-???
Flashplayer-MFC Runtime http://Library-.Net Framework-JRE


Flash:
之前只是一個矢量動畫製作工具的代稱,也就是所謂的「閃客」。現在Flash變成了一個廣泛意義上面的平台概念,即:Flash Platform
Flex:
是Adobe公司(現在是Apache基金會)基於Action Script 3.0開發的一套可視化工具包,即:Flex SDK
AIR:

  • Adobe Integrated Runtime,簡單的理解:可以讓Flash在桌面運行的一個必要運行環境(如C#之於.Net Framework一樣);
  • AIR SDK,這點可以理解為AIR的開發者工具包;

Flash Player:
運行SWF所必需的載體,有瀏覽器插件版及獨立桌面版。


在 flex 容器中默認存在兩條軸,水平主軸(main axis) 和垂直的交叉軸(cross axis),這是默認的設置,當然你可以通過修改使垂直方向變為主軸,水平方向變為交叉軸,這個我們後面再說。
在容器中的每個單元塊被稱之為 flex item,每個項目佔據的主軸空間為 (main size), 佔據的交叉軸的空間為 (cross size)。
這裡需要強調,不能先入為主認為寬度就是 main size,高度就是 cross size,這個還要取決於你主軸的方向,如果你垂直方向是主軸,那麼項目的高度就是 main size。http://985.so/b4v4L


「MXML主要用於開發可視化的界面,而ActionScript則用於編寫業務邏輯」說的很好


推薦閱讀:

《黑客與畫家》中有這樣一句話:「如果你把一個畫家的作品按照時間順序排列,就會發現每幅畫所用的技巧,都是建立在上一幅作品學到的東西之上。」如何能將這個觀點用於實際的項目開發上?
怎樣建設一個公司網站?
現在,2萬塊外包或者私活能做出個什麼效果的移動端產品?
前端工程師面試時被問到為什麼要做前端時,怎麼回答比較合理?
JS學習的思考,你曾經也這樣嗎?

TAG:網頁設計 | 前端開發 | 交互設計師 | ActionScript | AdobeAIR | AdobeFlash | AdobeFlex | AdobeFlashBuilder |