用 Adobe AIR/Flex 做 iOS 開發有哪些優勢和局限?

來源:互聯網
上載者:User

這是我在知乎上的一個回答,原文在這裡:http://www.zhihu.com/question/20001972/answer/15572624
 

我沒有用XCode開發過具體項目,我的移動開發經驗主要是Android SDK、AIR for Android、AIR for iOS。

因為開發經驗的限制,我不能準確的說明XCode的優勢和劣勢,這裡只基於自己的Android開發經驗,以及AIR在iOS上的開發經驗來分析。


AIR的優勢

AIR的優勢其實就是Flash或者ActionScript語言的優勢。這些優勢大家已經在互連網上看過許多了,我還是囉嗦一下:

 

1. 優秀的2D效能和渲染機制
網路上關於Flash效能底下的言論是絕對錯誤的。其實Flash的效能相當高,而且大多數情況下都比Javascript高。ActionScript經過如此長時間的專制發展,形成了一套便於使用的顯示列表(DisplayObject)機制,加上靈活的MovieClip和Sprite等等對象,在製作2D動畫方面,是目前互連網技術中最好的選擇。即使是你認為顯示列表的效能底下(在顯示對象超過1K的情況下確實低下),你也完全可以使用BitmapData這個高效能的引擎做位元影像渲染。

 

2. 蓬勃發展的3D技術
Stage3D比OpenGL要更容易掌握。使用各種開源、付費的引擎,程式員可能不需要瞭解3D工作機制,就能製作3D動畫(或者遊戲)。當然,目前的Stage3D的驅動支援還有待完善,但Adobe目前很努力(不努力就掛掉了),驅動情況會慢慢解決掉。
更讓人激動的是Starling這類使用Stage3D進行2D渲染的引擎。完全為遊戲而生,把Flash的2D效能又提高了一個數量級。

 

3. 比較完善的架構和社區
Flash社區經過多年發展,已經非常完善,有很多的優秀的架構、工具、引擎、調試器、甚至編譯器可以使用。當然,OC社區或許更完善,所以這個有優勢並不明顯。

 

4. 簡單易用的語言
ActionScript是簡化版的JAVA。我無法把ActionScript與OC對比,但ActionScript絕對比JAVA易用。相關比較可以看這個:http://www.zhihu.com/question/19762068/answer/15544195

 

5. 使用ANE可以完成所有OC能做的事情
AIR使用的ANE外掛程式技術,讓你用OC開發一些本機外掛程式,以API的方式來調用它,讓你能完成AIR本不能完成的事情。後面我會提到,其實這個也算劣勢。


AIR的劣勢

 

1. 大檔案
AIR在iOS上並非採用的是虛擬機器模式。它直接把ActionScript代碼編譯成二進位代碼,這與XCode變成成的二進位代碼沒有區別。整個AIR運行時也變成二進位代碼。這就導致了無論是什麼大小的程式,你總要在它的基礎上加上運行時的大小——10MB+。

 

2. 不是BUG的BUG
由於上面描述的原因,你要把ActionScript當作OC來用,否則可能會碰到某些不是BUG的BUG。我在這篇文章中就講到了這樣一個BUG:http://zengrong.net/post/1654.htm

 

3. 痛苦的調試
FlashBuilder並不是面向iOS開發的,所以它的調試過程複雜且痛苦。在FlashBuilder 4.6上,我必須利用iTunes這個垃圾軟體把打包好的Debug版本的ipa檔案安裝到iOS裝置上,然後在FlashBuider上啟動調試進程。Debug版本的ipa運行十分緩慢(對,是十分),甚至因為它的緩慢,很多BUG都無法發生。
當然,這種情況在AIR 3.4出現之後有所好轉。AIR 3.4不需要iTunes就能把ipa部署到iOS裝置中進行調試。但是,目前的FlashBuilder4.6還不支援這種方式,你要使用AIR3.4的新的直接部署調試功能,就必須使用命令列,然後調用fdb來調試。
AIR 3.5支援在Release版本(非Debug版本)中輸出調試堆棧,這能讓我們用正常的速度來調試ipa,但這其實是讓我們更麻煩了。

 

4. 痛苦的編譯
你能忍受一次編譯需要20分鐘嗎?如果你的程式很複雜,那麼這個時間還會延長。你能忍受在發布程式之前,突然發現一個小bug,然後等待20分鐘編譯調試嗎?注意,某些bug,只能在編譯之後才會出現。

 

5.痛苦的ANE調試
和上面的調試不同,ANE的調試更加痛苦可不可捉摸。很多情況下,ANE的錯誤是直接FC,沒有報錯代碼,沒有訊息,解決問題只能靠猜,你能猜中嗎?
更痛苦的是,大部分情況下,使用AIR的程式員都在Windows下工作,使用AIR內建的ADL在Windows系統上調試,這種調試方法是不支援ANE的,你要測試ANE,必須打包後在iOS真實裝置上調試,這又碰到了上面說的“痛苦的調試”的情況。


不完善的小結
 

 

這種情況下可以使用AIR

  • 你要開發的東西是遊戲(不要用AIR開發應用)
     
  • 有一個Flash遊戲需要移植到iOS上(移植)
     
  • 開發一個新遊戲,只有1個月時間(快速開發)
     
  • 只會ActionScript和Flash(技術限制)
     

 

關於Flex

Flex SDK包含swf編譯器、swf相關工具、MXML語言和一套名為Flex的架構,這套架構大部分是做介面的事情。但即使是Adobe說他們的Flex中包含的UI組件為行動裝置做了多少最佳化,也千萬不要用它來開發行動裝置上的程式,否則你會痛苦一被子。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.