偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Adobe AIR教程:面向iOS設(shè)備的原生擴展

移動開發(fā)
本文為AIR Native Extension實現(xiàn)iOS應(yīng)用內(nèi)付費全教程的第二部分:面向iOS設(shè)備的原生擴展。

本文的主要內(nèi)容如下

AIR Native Extension介紹

ANE的組成部分

ActionScript 3.0擴展

Objective-C 擴展

使用ADT打包ANE

使用ADT打包IPA

AIR Native Extension介紹

AIR Native Extension (ANE)是AIR 3.0的一項重要特性,簡單的說,它允許AIR應(yīng)用程序通過擴展文件與原生應(yīng)用程序類庫相互通訊,從而讓AIR應(yīng)用實現(xiàn)一些只有原生程序才可以做到的功能。

在ANE出現(xiàn)以前,移動平臺上的AIR對系統(tǒng)的訪問非常有限,功能的實現(xiàn)都是封裝在封閉的,由Adobe定義好的ActionScript 3.0 API內(nèi),比如Accelerometer, GeoLocator等AS類。ANE則將AIR徹底開放出來,AIR不再針對具體的功能提供封閉的API,而是允許開發(fā)者通過AIR的擴展機制自由調(diào)用使用原生語言開發(fā)的類庫。這樣可以讓AIR應(yīng)用程序享有與原生應(yīng)用程序同等的機會,其意義對Flash技術(shù)來說是劃時代的。

ANE的組成部分

ANE支持向Windows、Mac OSX、Android和iOS各個平臺原生應(yīng)用程序的擴展,本文只針對iOS平臺進行介紹。在iOS平臺中,ANE的組成部分基本分為ActionScript 3.0擴展類庫和Objective-C原生擴展類庫兩個部分,這兩個部分打包后生成AIR擴展文件(.ane),***和AIR應(yīng)用程序一起打包成iOS原生應(yīng)用IPA文件。如下圖所示。

 

圖1 ANE的組成部分

ActionScript 3.0擴展

ANE的AS擴展部分是一個SWC,AIR 3.0 SDK里為flash.external.ExtensionContext類添加了新的方法。如下例所示:

  1. import flash.external.ExtensionContext; 
  2. ... 
  3. private var ext:ExtensionContext; 
  4. ... 
  5. ext = ExtensionContext.createExtensionContext("com.adobe.appPurchase",""); 

在這個例子里,ExtensionContext通過靜態(tài)方法createExtensionContext()來獲得一個實例,參數(shù)com.adobe.appPurchase是這個擴展的ID,它非常重要,在擴展的配置文件里和應(yīng)用程序描述文件中都需要用這個ID進行配對。

調(diào)用原生類中定義的方法可以用方法call()來實現(xiàn),由于是同步調(diào)用,所以函數(shù)可以有返回值。如在原生類中定義的方法finish,可以用下面的代碼來調(diào)用。

  1. var result:Object = ext.call("finish"); 

我們還可以給ExtensionContext類添加事件偵聽,用來獲取從原生類中派發(fā)回來的事件。

  1. ext.addEventListener(StatusEvent.STATUS,onStatus); 
  2. public function onStatus(e:StatusEvent):void{ 
  3. switch(e.code){ 
  4. case "removeTransaction": 
  5. ... 
  6. } 

Objective-C 擴展

接下來是原生類的部分,如果你注冊成為蘋果iOS開發(fā)者,那么你可以在蘋果開發(fā)者網(wǎng)站上免費下載Object-C的開發(fā)工具XCode。關(guān)于如何注冊成為蘋果iOS開發(fā)者,請參考我的這篇文章,如何成為一個合法的iOS開發(fā)者。

總的來說,Objective-C 雖然語法比較奇怪,但只要掌握了基本的規(guī)則,還是和ActionScript一樣易懂。OBJC擴展類需要引入一個FlashRuntimeExtension.h類包,它實現(xiàn)了和ActionScript溝通的接口。

引入FlashRuntimeExtension.h之后,可以用下面的代碼定義一個FREObject方法,F(xiàn)REObject是接口類型。這里要注意,與AS的接口包括函數(shù)返回值,都要定義成FREObject類型,比如代碼中的retVal。

  1. FREObject finishTransaction1(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { 
  2. NSLog(@"Finish Transaction Called"); 
  3. BOOL matchFound = NO
  4. const uint8_t* str = nil
  5. uint32_t len = -1; 
  6. ...... 
  7. FREObject retVal; 
  8. if(FRENewObjectFromBool(matchFound, &retVal) == FRE_OK){ 
  9. return retVal; 
  10. }else{ 
  11. return nil; 

要把FREObject方法定義成接口,還需要在ContextInitializer方法內(nèi)進行配置,如下:

  1. //這里是需要定義的接口的數(shù)量 
  2. *numFunctionsToTest = 6
  3. //定義一個FRENamedFunction類型的實例func,初始化函數(shù)的個數(shù) 
  4. FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*6); 
  5. //定義一個接口,name是字符串"getProducts",函數(shù)體是getProducts 
  6. func[0].name = (const uint8_t*)"getProducts"; 
  7. func[0].functionData = NULL
  8. func[0].function = &getProducts; 
  9. func[1].name = (const uint8_t*)"startPayment"; 
  10. func[1].functionData = NULL
  11. func[1].function = &startAppPayment; 
  12. func[2].name = (const uint8_t*)"finish"; 
  13. func[2].functionData = NULL
  14. func[2].function = &finishTransaction1; 
  15. func[3].name = (const uint8_t*)"muted"; 
  16. func[3].functionData = NULL
  17. func[3].function = &muted; 
  18. func[4].name = (const uint8_t*)"restore"; 
  19. func[4].functionData = NULL
  20. func[4].function = &restoreTrans; 
  21. func[5].name = (const uint8_t*)"trans"; 
  22. func[5].functionData = NULL
  23. func[5].function = &getTrans; 
  24. *funcfunctionsToSet = func; 
  25. .... 

而ContextInitializer方法,是在原生擴展類的初始化函數(shù)ExtInitializer中指定的:

  1. void ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, 
  2. FREContextFinalizer* ctxFinalizerToSet) { 
  3. NSLog(@"Extension Initialized"); 
  4. *extDataToSet = NULL
  5. *ctxInitializerToSet = &ContextInitializer; 
  6. *ctxFinalizerToSet = &ContextFinalizer; 

ExtInitializer是原生擴展的程序入口,它可以通過擴展配置文件extension.xml來定義:

  1. com.adobe.appPurchase 
  2. libAppPurchase.a 
  3. ExtInitializer 
  4. ExtFinalizer 

我介紹的這個順序,實際上就是實際程序編寫的思路,先確定接口,再實現(xiàn)連接。 也許有朋友和我一開始接觸OBJC的時候一樣,對這些代碼一頭霧水。沒有關(guān)系,在這篇教程里我只是對流程做簡短的介紹,具體的代碼解析會在本系列的***一篇教程里做更詳細的講解。那么接下來讓我來介紹下一個部分,打包擴展。

使用ADT打包ANE

在圖1中,我介紹了.ane文件的組成,它包括了AS類庫(.swc)和原生類(.a)兩個部分,以及剛才我們介紹的這個擴展配置文件extension.xml。那么要打包ane我們還需要哪些文件呢?

 

圖2 打包ANE所需要的文件

如圖2所示,所選擇的文件以及文件夾就是打包ANE所需要的所有文件,它包括:

1,AIR SDK打包應(yīng)用程序和類庫(bin,lib)

2,ActionScript擴展類包.swc,如圖ANE_IAP_ASLib.swc

3,ActionScript擴展類包.swf,如圖library.swf,可以通過將SWC的文件擴展名改成ZIP后解壓縮得到。

4,Objective-C擴展類包.a,如圖libAppPurchase.a,可以通過在Xcode中編譯項目得到。

5,擴展配置文件XML,如圖extension.xml

6,一個打包證書,如圖selfsigned.p12,可以通過Flash CS5的AIR發(fā)布設(shè)置生成。

一切就緒后便可以使用命令行進行打包,注意路徑,下例路徑為當(dāng)前文件夾。

  1. bin/adt -package -storetype pkcs12 -keystore selfsigned.p12 -storepass 1234 -target ane ext/InApp.ane extension.xml -swc ANE_IAP_ASLib.swc -platform iPhone-ARM library.swf libAppPurchase.a 

使用ADT打包IPA

.ane文件打包成功后,便可以用來打包IPA文件,也就是iOS應(yīng)用程序包。如果你對開發(fā)iOS應(yīng)用的必要流程還不很清楚,請參閱我的這篇教程,如何使用iOS開發(fā)者授權(quán)以及如何申請證書。我以前介紹過如何用Flash Professional CS5打包IPA,今天主要介紹如何用AIR SDK的打包工具ADT來生成含有ANE擴展的IPA。

 

圖3 使用ADT生成含有ANE擴展的IPA所需要的文件

如圖3所示,所選擇的文件就是生成IPA的必要文件:

1,應(yīng)用程序文件SWF,如圖是ANE_IAP_Example.swf。

2,開發(fā)者設(shè)備授權(quán)文件.mobileprovision,如圖是ghostbride_dev.mobileprovision。

3,開發(fā)者簽名證書文件.p12,如圖是jameslidevelopment.p12。

4,應(yīng)用程序描述文件XML,如圖是info-app.xml。

5,擴展包路徑,如圖是ext

6,如果應(yīng)用程序有圖標(biāo)圖片,還需要圖標(biāo)文件夾,如圖是icon

在應(yīng)用描述文件XML中,需要對擴展追加一個定義:

  1. com.adobe.appPurchase 

這里可以看到,在AS擴展類、擴展配置文件extension.xml和應(yīng)用描述文件info-app.xml中都指定了一個統(tǒng)一擴展的ID: com.adobe.appPurchase。

利用下面的命令行可以打包生成Main.ipa:

  1. bin/adt -package -target ipa-test-interpreter -provisioning-profile ghostbride_dev.mobileprovision -storetype pkcs12 -keystore jameslidevelopment.p12 -storepass 1234 Main.ipa info-app.xml ANE_IAP_Example.swf -extdir ext icon 

 

責(zé)任編輯:佚名 來源: jamesli.cn/blog
相關(guān)推薦

2011-11-16 16:21:09

AdobeAIR

2011-11-16 14:20:43

Adobe AIR

2012-03-13 16:16:39

AdobeAIR for TV

2011-11-16 15:47:04

AdobeAIRiOS應(yīng)用

2012-03-15 09:55:23

Adobe AIR安裝

2012-03-09 13:52:28

Adob??e AIRiOS

2011-11-16 15:08:30

AdobeAIRiOS應(yīng)用

2012-03-09 10:46:35

Adobe AIR是什Adobe AIRAIR

2011-11-16 13:47:05

2009-06-25 10:46:22

Silverlight

2009-01-18 09:20:49

AIRAdobeFlex

2012-04-04 11:36:40

iOS

2012-02-28 13:52:45

Adobe AIRAndroidFlash

2011-11-17 15:17:37

AdobeAIR調(diào)試性能

2010-10-29 09:28:52

Adobe AirAdobe MAXflash

2010-08-18 08:21:49

Adobe AIRAndroid

2012-07-06 13:45:21

跨平臺工具Adobe AirFlex

2012-03-15 09:46:41

UbuntuLinux安裝Adobe AIR

2011-12-30 15:17:23

Adobe視頻PhoneGap

2011-11-16 13:58:12

Adobe AIR
點贊
收藏

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