自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

給iOS開發(fā)AIR Native擴展的20條建議

移動開發(fā)
這篇文章寫得非常好,基本包括了目前ANE開發(fā)需要的所有注意事項,感謝作者Richard Lord。文中我會以作者的口吻來翻譯。

過去的三個月中我為iOS平臺創(chuàng)建了三個AIR Native Extension的擴展(在Github中可以找到代碼),這些擴展全部被用在我們的游戲Stick Cricket Super Sixes中,同時我們也總結(jié)了很多經(jīng)驗。雖然我記得并不全面,但下面這幾條建議,可以給很多打算開發(fā)ANE項目的開發(fā)者助以一臂之力。

文檔

1. 開始

這兩篇文檔對初學(xué)者很有幫助,如果你不知道該如何起步,可以從閱讀這兩篇文檔開始。在網(wǎng)絡(luò)上也有很多好的文章,只要Google一下就行了。

Extending Adobe Air

AIR Native Extension Example: iBattery for iOS

2. 閱讀Adobe官方文檔

大部分的開發(fā)所需的資料在這篇 Adobe’s documentation 中都可以找得到。

編寫Actionscript代碼

3. 認真編寫 Actionscript API

確保你的Actionscript接口是你的項目中想要的。不要往Actionscript里被動地照搬iOS接口,要像編寫常規(guī)Actioscript類那樣定義你的接口。

記住,后期如果修改原生代碼只會影響到ANE擴展本身,但如果修改Actionscript接口則會影響到所有使用該ANE的項目。所以在前期要盡可能完善地定義你的Actionscript接口。

4. 盡可能在Actionscript一端做錯誤檢查

為了避免錯誤的發(fā)生,你需要在調(diào)用ANE方法的時候做參數(shù)合法性的檢查,你可以等到調(diào)用原生代碼時再做檢查,但如果提前在調(diào)用Actionscript接 口的時候就做檢查會更簡單一些。如果你能保證每次調(diào)用原生代碼時都不會出錯,比如參數(shù)個數(shù)和參數(shù)類型,那么完全可以只在Actionscript里做判 斷。

當然,如果你習(xí)慣于在C里寫錯誤檢查,當然可以。我個人更喜歡在Actionscript里做這件事情。

5. 創(chuàng)建一個原生類的替身

即使你打算僅為iOS寫擴展,我也建議你創(chuàng)建一個原生類庫的替身。用純Actionscript代碼創(chuàng)建這個替身,這樣它就可以為所有的平臺所用。在這個 替身里按照iOS原生接口定義一套純Actionscript接口方法,即使在調(diào)用的時候拋異?;蛘叻祷乜罩狄矝]有關(guān)系,至少它是合法的 Actionscript調(diào)用,而且可以在其他平臺比如桌面上測試使用。

如果不用這樣一個替身,你就每次只能在iOS設(shè)備上做測試,這樣會讓開發(fā)測試工作極為痛苦。相反,如果使用這個替身,你可以在桌面上快速發(fā)布應(yīng)用來測試那些與設(shè)備不相關(guān)的功能和模塊。

 

Adobe Air Logo

 

編寫原生代碼

6. 使用Objective-C來實現(xiàn)蘋果的程序接口

你并不是必須要使用Objective-C,但是如果想要實現(xiàn)蘋果的程序接口,用Objective-C會很方便。否則你需要用C或者C++。

7. 把為AIR編寫的接口方法寫在.m文件里

AIR和原生代碼之間的接口是用C寫的,所以你的原生代碼需要引用一個包含C代碼的文件來實現(xiàn)這些接口。如果你把接口放在.c文件中,那么你不能使用任何 Objective-C功能(比如你無法用objective-c的語法去調(diào)用objective-c接口),但是如果你把接口放在了.m文件就可以。所 以用.m文件會更方便一些。

8. 包含AIR原生接口的.m文件不需要.h頭文件

但是你需要在XCode項目設(shè)置中的警告選項里把”missing function prototypes”這一項給關(guān)掉。

9. 為initializer和finalizer方法起一個獨一無二的名字

很多ANE的例子都使用了”extInitializer”和”extFinalizer”來給擴展的入口和出口函數(shù)命名。但如果在項目中使用多個ANE擴展,這樣會導(dǎo)致命名沖突。所以給入口和出口函數(shù)起一個獨一無二的名字。

10. 在項目中使用宏

在定義接口的時候,你可能需要重復(fù)輸入很多遍類似這樣的代碼來定義函數(shù)

  1. FREObject someFunction(FREContext context, void* functionData, uint32_t argc, FREObject argv[])  

我建議使用宏定義來代替所有這些重復(fù)的定義方式。你可以在這個源文件中找到宏定義的例子。(感謝David Wagner的提供)

11. 把“Enable linking with shared libraries”設(shè)置成yes

網(wǎng)絡(luò)上很多關(guān)于在XCode里如何設(shè)置這個選項的討論,有人說”no”有人說”yes”?;旧希f設(shè)置成”yes”的說明你的應(yīng)用在發(fā)布的時候需要鏈接 外部類庫,這個選項就是這個意思。但是這也意味著你在發(fā)布含有此擴展的AIR應(yīng)用時,你必須要告訴編譯器你的iOS SDK在哪里,這樣你才可以使用那些類庫。具體看下面第18條。

如果你得到這樣一個編譯錯誤

  1. ld warning: unexpected srelocation type 9 

則你可能要么忘了開啟這個選項,要么沒有給編譯器指明SDK的位置。

#p#

12. 小心使用線程

你的原生擴展不能在除主線程之外其他線程創(chuàng)建Actionscript對象,而且必須要從AIR端調(diào)用。這樣會導(dǎo)致在Objective-c中使用塊的時 候問題重重。然而,你可以通過一種途徑來達到這個目的,那就是使用Actionscript ExtensionContext事件派發(fā)機制。方法如下:

1,在一個線程中,創(chuàng)建一個原生對象并儲存數(shù)據(jù)。

2,派發(fā)事件給ExtensionContext,為下一步傳送必要的細節(jié)。

3,在事件響應(yīng)的方法中,調(diào)用原生接口來獲得這個原生對象。

4,在這個被調(diào)用的原生方法里,利用該原生對象創(chuàng)建一個Actionscript對象。

13. 創(chuàng)建原生view對象

AIR應(yīng)用是在一個標準的window對象里運行的,你可以通過下面的方法獲得這個window對象:

  1. [UIApplication sharedApplication].keyWindow 

得到window對象后你可以給它添加subviews來顯示原生的view對象。

編譯擴展

14. 批處理編譯和測試

當我開發(fā)Game Center擴展的時候我創(chuàng)建了一個簡單的AIR應(yīng)用來測試ANE。

我創(chuàng)建了一個ANT腳本來編譯整個擴展(編譯原生C類,編譯AS3類,編譯AS3原生替身類,并把它們?nèi)看虬階NE里)。

結(jié)果就是,在Eclipse里點擊一次,我就可以編譯和測試整個項目,下一步就是拖入設(shè)備直接測試應(yīng)用了(XCode里的Organiser可以很方便的 實現(xiàn)這步)??偣不瞬畈欢?0秒鐘的時間來打包,雖然仍然比理想的多了9秒,但已經(jīng)比我見過的大多數(shù)工作流都要好很多。

也許用Flash Builder有更好的方法(因為我用的是FDT),而且你當然不必使用ANT,任何編譯工具都可以達到這個效果。但是你需要盡可能的使用流水線的方式來編譯和測試這個流程。如果你需要這些代碼,可以在Game Center extension project里找到。

15. 使用第三方類庫

如果你正在擴展里使用一個第三方類庫(比如在Flurry extension里的Flurry統(tǒng)計類庫),你需要在編譯的時候使用“-platform iPhone-ARM” 參數(shù)來引用這個類庫。

16. 你可能需要使用platform.xml

如果你會用到任何一個但不是大多數(shù)的iOS SDK類庫,你需要創(chuàng)建一個platform.xml文件來指明你需要使用的類庫,以及應(yīng)用所需要的最小iOS版本。我為每一個擴展都創(chuàng)建了一個platform.xml文件,因為在使用AIR3.1編譯時會出現(xiàn)一個有關(guān)未知最小iOS版本的警告,使用這個文件會隱藏這個警告。

打包應(yīng)用

17. 如果IDE編譯的時候并不依賴原生擴展,則你的應(yīng)用需要引用擴展替身swc來保證運行成功

這個SWC里包括了一整套與原生擴展相同的Actionscript接口,所以你可以使用它進行編譯,并且在開發(fā)的時候用來測試。當然,不依賴原生擴展的IDE不會正確地發(fā)布移動應(yīng)用,但你可以用我介紹過的那種批處理編譯腳本來實現(xiàn)最終的正常編譯。

18. 發(fā)布AIR應(yīng)用的時候,指明需要引用的iOS SDK地址

默認情況下,AIR編譯器會使用iOS SDK 4.0來編譯應(yīng)用。如果你使用了這個版本里所不包括的新功能,則編譯的時候就會出錯。這時需要指明iOS SDK的新版本位置,從而實現(xiàn)對新功能類庫的引用。在這篇文章中查看詳細信息。在Flash Builder里,在配置原生擴展的某個面板中可以進行這個設(shè)置,但如果你使用命令行來編譯,可以使用-platformsdk標簽來指定iOS SDK的路徑。

19. ld: warning: ARM function not 4-byte aligned

在編譯應(yīng)用的時候你可能會遇到多處下面這樣的警告:

1ld: warning: ARM function not 4-byte aligned

這些只是警告,不用去理它。4位對齊只是一個優(yōu)化,并非是必須的。

最后的最后

20. 讓你的原生擴展更加通用

當完成了擴展的開發(fā),你可以有三個選擇:

1, 只讓自己使用。

2, 向其他開發(fā)者開源。

3, 賣給其他開發(fā)者。

你可以問問自己,是什么讓你的應(yīng)用獨一無二。如果原因不是你的原生擴展(實際上很少是因為這個),那么請選擇第二個或者第三個,如果每個人都這么做,你也會從中受益。

另外,讓更多人從你的擴展中受益,可以讓Adobe AIR這項技術(shù)在移動開發(fā)領(lǐng)域里更加強大和穩(wěn)定。這會鼓勵其他的開發(fā)者去使用AIR,也會鼓勵A(yù)dobe繼續(xù)開發(fā)和改進它。

在Stick Sports我們選擇了第二項,因為比起花時間來運營我們的原生擴展,我們更愿意花時間來運營和支持我們的游戲。

【編輯推薦】

  1. Adobe AIR安裝官方教程
  2. 在Ubuntu版本的Linux下安裝Adobe AIR
  3. 構(gòu)建Adobe AIR for TV本機擴展
責任編輯:冰凝兒 來源: iteye
相關(guān)推薦

2011-05-30 15:44:07

敏捷開發(fā)

2011-11-16 16:21:09

AdobeAIR

2015-05-12 14:05:49

谷歌開發(fā)者

2013-02-21 13:14:00

移動游戲開發(fā)者開發(fā)商

2011-11-16 15:14:57

AdobeAIRiOS設(shè)備

2015-08-26 10:01:20

iOS開發(fā)

2015-09-28 10:09:05

程序員新手

2012-12-28 13:07:45

Bad HoteliOS開發(fā)者

2015-07-10 12:38:30

手游開發(fā)工作建議

2009-02-18 11:10:40

c++忠告方法

2022-06-15 15:30:29

Linux新用戶建議

2010-11-05 09:16:56

PHP

2013-03-12 10:26:41

PHP編程語言

2012-03-13 16:16:39

AdobeAIR for TV

2020-01-28 18:48:27

程序員JavaScript編程語言

2011-10-09 16:27:39

移動互聯(lián)網(wǎng)創(chuàng)業(yè)

2011-07-07 10:24:22

移動應(yīng)用開發(fā)

2012-12-28 14:50:52

應(yīng)屆畢業(yè)生

2012-04-01 15:03:39

大型項目開發(fā)者

2019-04-11 17:24:48

數(shù)據(jù)科學(xué)可視化白皮書
點贊
收藏

51CTO技術(shù)棧公眾號