ANE跨平臺as3轉object-candroiddesktop

鎮水古月發表於2012-08-17

引用:http://sswilliam.blog.163.com/blog/static/189696383201191094227313/

是不一個不錯的跨平臺路徑,但是整合也會導致效能下降,但總體來說划算

簡介

AIR3剛剛釋出,帶來的最令人激動的新特性莫過於Native Extension了。Native Extension就是讓AIR可以呼叫各個平臺上的原生程式碼(native code, ios上的object-candroid上的javadesktop上的c++c#),從而完成對AIRActionscript API的自定義擴充套件。即可以讓開發者通過編寫基於平臺的原生程式碼擴充套件ActionScript。從而完成一些原有Actionscript無法完成的功能。

眾所周知,AIRFlash平臺的一個重要組成部分。其優勢在於顯示和渲染,開發者可以使用ActionScript或者Flex快速高效的開發出有良好使用者體驗的RIA應用。但是對於一些高效能的運算和對特定硬體裝置的呼叫,AIR由於自身的限制而無法實現。

AIR 2中引入的NativeProcess的概念,從而讓AIR可以再桌面平臺可以啟動一個本地程式以協助AIR實現更多功能,AIR程式和NativeProcess的程式之間使用標準輸入輸出流(stdin,stdout,stderr)進行通訊。這裡需要說明一點,NativeProcesswindows上只能啟動exe,在mac上只能啟動dmg。其他任何格式的檔案都無法啟動。官方文件裡的範例啟動了一個.py檔案,經過實驗是無法執行的,只能是啟動python裡的python.exe,然後引數跟上相應的.py檔案的路徑,才能正確的執行python指令碼。NativeProcess大大擴充套件了AIR在桌面上的應用開發能力。

AIR 2.6開始,AIR開始支援移動平臺,包括AndroidiOS。在移動裝置上,由於裝置和作業系統的種種限制,NativeProcess就無法工作了。由於移動裝置的CPU普遍比桌面的CPU主頻要低很多,因此對程式的效能要求更高。同時不同的移動裝置的硬體設施各不相同(如陀螺儀,前後攝像頭,GPS)AIR也無法完整及時的提供所有硬體裝置的API,因此,為了讓AIR能更好的適應移動平臺的開發,急需要一種讓AIR在移動裝置上執行原生程式碼的解決方案。從而NativeExtension應運而生。

最初引入Native Extension的版本是AIR 2.5 for TV。引入的目的主要是由於TV有很多特性不可能被AIR原生API所支援,如操縱電視訊道。因此adobeAIR 2.5 for TV中加入了NativeExtension這個特性,讓AIRTV上可以執行TV的原生程式碼從而更好的適應TV的開發。

隨著AIR在越來越多的平臺上被支援,NativeExtension所帶來的優勢越來越明顯,所以AdobeAIR3中將這個特性擴充套件到了所有的平臺上。注意,是所有平臺而不僅僅是移動平臺,在桌面上也是可以使用NativeExtension的。

NativeExtension VS NativeProcess

NativeExtensionNativeProcess的主要區別在於,NativeProcess是新開一個程式完成相應的工作,而NativeExtensionAIR直接執行相應的原生程式碼,然後將結果返回給AIR。所有工作都在AIR本程式中完成。NativeExtension是讓開發者自己擴充套件ActionScriptAPI,在ActionScript與底層程式碼之間建立了一個橋接,讓開發基於系統的底層程式碼來擴充套件ActionScript

NativeExtension VS Alchemy

Alchemy也是flash平臺擴充套件的一大利器,NativeExtensionAlchemy的主要區別在於, Alchemy是將C/C++程式碼編譯為AVM可以執行的位元組碼,並生成一個相應的swc檔案從而完成對Flash 平臺的擴充套件,由於是編譯為AVM可執行的位元組碼,因此Alchemy適用於Flash PlayerAIRNativeExtension是將原生程式碼打包進ane檔案,並且提供了從Actionscript到原生程式碼的橋接,真正執行原生程式碼的還是作業系統本身而非AVM。而且NativeExtension只適用於AIR而不適用於Flash Player

簡單的來說,AIR NativeExtension就是一個帶有原生程式碼實現的SWC庫檔案。

組織結構

本文首先介紹NativeExtension的結構和實現原理,然後以最簡單的Hello World為例,介紹如何進行NativeExtension的開發,最後介紹如何使用AIR3SDK進行NativeExtension專案的打包和部署。


相關文章