移動互聯網電子產品領域Apple風頭正勁,Google也持續發力,兩大巨頭旗下產品iPhone和Android的競爭打的火熱。基于這兩個平臺的手機應用程序開發也進行的如火如荼。最近有機會著手進行了一些手機Flash lite技術的預研工作,嘗試從另一個技術層面來探索手機應用程序的開發。
主要關注了手機Flash Lite和電腦上運行的Flash的一些技術差異。由于是在手機上運行,Flash Lite特別需要考慮硬件性能和網絡傳輸的速度問題,因此相對Flash進行了一些功能削減。比如比較占內存、耗費CPU進行圖形色彩運算的濾鏡、混合模式等。如果主要用Flash Lite來做交互應用,那么這些增強視覺效果的功能被削減掉并不會對程序開發有太大影響;讓開發者感到麻煩的是,Flash中一些功能較完善的標準UI控件在Flash Lite中也不能直接使用,如ComboBox,DataGrid等,開發時需要自己針對Flash Lite編寫代碼封裝簡裝版UI控件。
Flash Lite開發手機應用程序值得注意的一些特點還主要體現在以下幾個方面:
1. 仍然使用AS 2.0腳本,目前最高版本的Flash lite 3x播放器還基于Flash Player 7開發,而Flash編程語言AS 3.0已經推出近3年,播放器目前版本已更新到 Flash Player 10。幾年前Flash Lite推出時由于手機終端的支持不夠理想,研究的人比較少;現在平臺支持率雖大有改善,但Flash Lite的開發和運行環境仍過于落后,很多開發者因此覺得沒有研究價值,導致應用上也比較落后,研究資料相對較少。目前所見到的應用比較多的都是單機小游戲,用來做網絡互聯應用的案例少之又少。但這另一方面也反映出Flash Lite的發展潛力。無線互聯網的發展狀況應該跟有線互聯網早期的發展模式有相似之處。初期限于網速條件和硬件平臺的不足,使用素材都是比較節省的文本和小型圖片,應用程序和游戲都以本地安裝文件為主;隨著網絡環境的改善和硬件的升級,聲光電影等多媒體素材也將逐步占領移動互聯網,各種基于網絡的應用程序和游戲也會更多地涌現出來。Adobe公司一直很注重Flash的跨平臺發展,相信將來無論哪種類型的手機OS勝出,都會對Flash Lite(或者干脆直接升級成Flash。補注:本文完成后已有最新消息 Adobe發布適用于google手機Android系統新版Flash10.1 )提供支持。從目前Flash在有線互聯網中的發展,可以預見Flash Lite在無線網絡中的一些未來。
2. Flash Lite提供了對一些手機設備專用功能的接口調用。例如提供對手機大部分撥號按鍵、導航方向鍵和軟鍵(左右功能鍵)的接口支持,可以通過偵聽按鍵事件并設置響應來控制用戶的交互流程;提供了讀取手機中部分設備信息的接口,如讀取電池電量、信號強度、音量、剩余內存、接入網絡類型、背光時常以及震動模式等信息,以及通過Flash Lite撥打電話和發送短信的功能。但出于安全考慮,也存在很大的限制,很多設備接口Flash Lite不能直接調用,例如無法讀取短信、通訊錄數據,以及對手機磁盤的讀寫等。不過在最新升級版Flash Lite3.1中,新加入了ActionScript擴展功能,Flash Lite 開發人員可以通過ActionScript API 來使用DLL,通過該DLL文件來與主機設備公開的API進行交互,這樣就實現了對手機設備操作系統API的調用(來自官方文檔,未經編寫實際代碼測試)。
3. 沙箱安全模型更嚴格了。在Flash Lite2.0時代,本地Flash Lite是能夠與網絡進行通信的,用下載到手機中的Flash Lite編譯文件作為客戶端程序來進行網絡交互完全可行。自Flash Lite 3.0起,手機存儲卡上的本地Flash Lite文件只能加載手機上的文件數據,無法以任何方式與網絡進行通信;而用瀏覽器訪問到的通過網絡發布的Flash Lite文件,就只能與網絡中的數據進行通信,無法加載手機上的本地數據。而沙箱模型以終端手機上安裝的Flash Lite播放器的版本為準,比如,發布成Flash Lite2的SWF文件,如果在Flash Lite3 播放器里播放,就會遵循Flash Lite3的安全模型,因此開發者無法決定自己的程序將在哪個安全模型下運行。這也是一個關于得失取舍的辯證哲學,更嚴格的安全模型會限制某些功能,關閉一些技術應用的可能性通道,但是卻能贏得使用者的信任,有利于技術的進一步推廣和發展。
4. 重點關注了Flash Lite網絡通信的相關技術。在遵循沙箱安全模型的前提下,Flash Lite和Flash一樣都支持類似于AJAX中XMLHTTPRequest對象所使用的網絡通信方式,通過GET和POST方式向后臺程序發送和獲取數據;另外在Flash中還支持Remoting和Socket兩種比較高級的通信方式,目前大多數使用Flash技術開發的游戲都采用這兩種方式。Remoting是一種遠程調用服務器端封裝好的類與方法以進行數據通信的技術,需要在服務器端進行一些程序配置以響應客戶端的連接。Flash實現了Remoting客戶端并采用獨家的AMF格式數據與服務器進行通信,而服務端除了Adobe官方的技術,一些其他的服務器端語言也實現了開源版本的Remoting AMF,如phpamf,rubyamf,pyamf等,對Flash Remoting提供了更全面的服務器端支持。Socket通信在Flash里內置支持,探索過程中我嘗試寫過一個簡單的多客戶端聊天室模型來熟悉通信過程 測試程序及源碼下載(服務器端腳本由資深Python開發工程師 Ljian 友情提供)。需要特別注意的是對比Flash Player9 和最近升級的Flash Player 10,Socket網絡通信的安全策略上發生了一些改變。Flash Player9及之前低版本的Flash播放器中,跨域以及Socket通信時只需要在目標域下放置一個經過授權配置的XML格式的安全策略文件即可。但現在這個安全策略文件只對HTTP方式的通信有效,進行Socket通信的安全策略文件需要通過Socket的方式進行發送,播放器默認會以Socket方式向服務端843端口請求策略文件,如果沒有響應就嘗試向Socket程序代碼中設定的監聽端口發送請求。所以相應的解決辦法需要在服務器端程序里監聽843端口,收到Socket連接請求時發送安全策略文件,或者直接在Socket客戶端連接請求設定的監聽端口中進行發送。在上面提到的兩種高級通信方式中,Flash Lite目前只支持使用XMLSocket實現的實時通信,傳遞的數據要求是XML格式,相對比較低效,在目前網絡環境下能否應用到實際項目中,還需要進一步考察。
無線互聯網產品模式的發展,特別是一些Social Game游戲的興起,會對手機應用程序的交互體驗提出更高要求,給移動平臺Flash技術的發展帶來一定契機。移動平臺Flash技術的大發展,有賴于Adobe公司的積極努力進取,也需要開發者的不斷探索嘗試和持續關注,讓我們拭目以待。