`

Adobe AIR教程:面向iOS设备的原生扩展

ane 
阅读更多

来自 51CTO:http://mobile.51cto.com/others-302272.htm

本文的主要内容如下

AIR Native Extension介绍

ANE的组成部分

ActionScript 3.0扩展

Objective-C 扩展

使用ADT打包ANE

使用ADT打包IPA

AIR Native Extension介绍

AIR Native Extension (ANE)是AIR 3.0的一项重要特性,简单的说,它允许AIR应用程序通过扩展文件与原生应用程序类库相互通讯,从而让AIR应用实现一些只有原生程序才可以做到的功能。

在ANE出现以前,移动平台上的AIR对系统的访问非常有限,功能的实现都是封装在封闭的,由Adobe定义好的ActionScript 3.0 API内,比如Accelerometer, GeoLocator等AS类。ANE则将AIR彻底开放出来,AIR不再针对具体的功能提供封闭的API,而是允许开发者通过AIR的扩展机制自由调用使用原生语言开发的类库。这样可以让AIR应用程序享有与原生应用程序同等的机会,其意义对Flash技术来说是划时代的。

ANE的组成部分

ANE支持向Windows、Mac OSX、Android和iOS各个平台原生应用程序的扩展,本文只针对iOS平台进行介绍。在iOS平台中,ANE的组成部分基本分为ActionScript 3.0扩展类库和Objective-C原生扩展类库两个部分,这两个部分打包后生成AIR扩展文件(.ane),最后和AIR应用程序一起打包成iOS原生应用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通过静态方法createExtensionContext()来获得一个实例,参数com.adobe.appPurchase是这个扩展的ID,它非常重要,在扩展的配置文件里和应用程序描述文件中都需要用这个ID进行配对。

调用原生类中定义的方法可以用方法call()来实现,由于是同步调用,所以函数可以有返回值。如在原生类中定义的方法finish,可以用下面的代码来调用。

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

我们还可以给ExtensionContext类添加事件侦听,用来获取从原生类中派发回来的事件。

  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开发者,那么你可以在苹果开发者网站上免费下载Object-C的开发工具XCode。关于如何注册成为苹果iOS开发者,请参考我的这篇文章,如何成为一个合法的iOS开发者。

总的来说,Objective-C 虽然语法比较奇怪,但只要掌握了基本的规则,还是和ActionScript一样易懂。OBJC扩展类需要引入一个FlashRuntimeExtension.h类包,它实现了和ActionScript沟通的接口。

引入FlashRuntimeExtension.h之后,可以用下面的代码定义一个FREObject方法,FREObject是接口类型。这里要注意,与AS的接口包括函数返回值,都要定义成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方法内进行配置,如下:

  1. //这里是需要定义的接口的数量 
  2. *numFunctionsToTest = 6
  3. //定义一个FRENamedFunction类型的实例func,初始化函数的个数 
  4. FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*6); 
  5. //定义一个接口,name是字符串"getProducts",函数体是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方法,是在原生扩展类的初始化函数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 

我介绍的这个顺序,实际上就是实际程序编写的思路,先确定接口,再实现连接。 也许有朋友和我一开始接触OBJC的时候一样,对这些代码一头雾水。没有关系,在这篇教程里我只是对流程做简短的介绍,具体的代码解析会在本系列的最后一篇教程里做更详细的讲解。那么接下来让我来介绍下一个部分,打包扩展。

使用ADT打包ANE

在图1中,我介绍了.ane文件的组成,它包括了AS类库(.swc)和原生类(.a)两个部分,以及刚才我们介绍的这个扩展配置文件extension.xml。那么要打包ane我们还需要哪些文件呢?

 

图2 打包ANE所需要的文件

如图2所示,所选择的文件以及文件夹就是打包ANE所需要的所有文件,它包括:

1,AIR SDK打包应用程序和类库(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发布设置生成。

一切就绪后便可以使用命令行进行打包,注意路径,下例路径为当前文件夹。

  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应用程序包。如果你对开发iOS应用的必要流程还不很清楚,请参阅我的这篇教程,如何使用iOS开发者授权以及如何申请证书。我以前介绍过如何用Flash Professional CS5打包IPA,今天主要介绍如何用AIR SDK的打包工具ADT来生成含有ANE扩展的IPA。

 

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

如图3所示,所选择的文件就是生成IPA的必要文件:

1,应用程序文件SWF,如图是ANE_IAP_Example.swf。

2,开发者设备授权文件.mobileprovision,如图是ghostbride_dev.mobileprovision。

3,开发者签名证书文件.p12,如图是jameslidevelopment.p12。

4,应用程序描述文件XML,如图是info-app.xml。

5,扩展包路径,如图是ext

6,如果应用程序有图标图片,还需要图标文件夹,如图是icon

在应用描述文件XML中,需要对扩展追加一个定义:

  1. com.adobe.appPurchase 

这里可以看到,在AS扩展类、扩展配置文件extension.xml和应用描述文件info-app.xml中都指定了一个统一扩展的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 
分享到:
评论

相关推荐

    ADOBE AIR 教程

    此外,教程还会介绍如何利用Adobe AIR API进行数据存储、网络通信以及设备访问。 在实际应用方面,ADOBE AIR广泛应用于游戏开发、桌面工具、教育软件等各个领域。例如,许多流行的手机游戏如“愤怒的小鸟”最初就是...

    [使用AdobeAIR开发Android应用程序].PDF 及源代码

    4. **PDF文档的价值**:“[使用AdobeAIR开发Android应用程序].PDF”可能包含详细的教程和指南,涵盖了从环境设置到实际编程的全过程,可能包括Air SDK安装、Flex Builder或IntelliJ IDEA的使用、打包和发布应用等...

    Advertising-ANE:Adobe Air 的广告原生扩展

    Adobe Air 的广告原生扩展 此广告 ANE 添加了对使用 Adob​​e Air 的所有主要移动系统和流行广告网络的支持。 支持IOS、安卓和Kindle。 由带给您。 感谢我们的支持者。 Michał Moczyński 马库斯弗雷泽 德怀特....

    丁然:进入Adobe Air移动世界

    Adobe Air 的核心优势在于跨平台特性,开发人员无需针对不同的操作系统编写特定的代码,而是可以面向 AIR 运行时进行开发,这降低了管理各种设备系统复杂低级别 API 的需要。对于 Flash 开发团队来说,Adobe Air ...

    与iOS和Android设备的系统卷交互的AIR本机扩展。.zip

    本主题将深入探讨如何使用AIR本机扩展(ANE)与iOS和Android设备的系统卷进行交互。 1. **AIR本机扩展(ANE)**: - AIR本机扩展是Adobe AIR框架的一部分,它允许开发者利用本地设备的功能,如硬件加速、访问系统...

    FlashDevelop打包IOS应用教程

    3. **Adobe AIR**:Adobe AIR(Adobe Integrated Runtime)允许开发者使用Flash技术创建跨平台的应用程序,包括在iOS设备上运行的APP。AIR提供了iOS SDK,使得Flash内容能在iOS设备上运行。 4. **iOS SDK集成**:...

    adobe air开发android应用 developing android application with adobe air

    ### 使用Adobe AIR开发Android应用:详细入门教程 随着移动设备的普及和技术的发展,越来越多的应用程序被开发出来以满足用户在不同场景下的需求。Adobe AIR(Adobe Integrated Runtime)是一种跨平台的应用程序...

    system-ane:移动系统 AIR 原生扩展

    用于核心移动系统 API 的 AIR 本机扩展 获取设备标识符 发送消息(日志、通知) 监听传感器 先决条件 JDK(通用) 设置JAVA_HOME环境。 变量是必不可少的 Gradle(普通) 设置GRADLE_HOME环境。 变量是必不可少...

    adobeAir开发工具

    通过 Adobe AIR 运行时,开发人员可以将同一代码打包到 Windows 和 Mac OS 桌面设备以及 iOS 和 Android 设备的原生应用程序和游戏中,范围覆盖 5 亿多台设备上的 10 亿多桌面系统和移动应用程序商店。

    IOSStatusBarAne:ios 状态栏刷新 (objective-c) 空中移动应用程序 (as3,flex) 的原生扩展

    :) ios 状态栏使用 ane 文件刷新本机扩展。 ios7 状态栏错误解决方案已修复。 ios7 cameraroll as there after status bar not refresh 修复了错误解决方案。 Adobe Air i0S7 StatusBar Overlays 阶段,修复了 Adob...

    Flash创建AIR

    1. **本机扩展(ANE)**:ANE文件允许AIR应用程序调用平台特定的原生代码,扩展AIR的功能范围。 2. **本机扩展与ActionScript类库**:通过SWC文件,可以在ActionScript中调用ANE提供的功能。 3. **支持的设备和...

    Adobe AIR 移动开发源

    Adobe AIR(Adobe Integrated Runtime)允许开发者使用ActionScript 3或Flex构建桌面和移动设备的应用程序,它具有广泛的兼容性,覆盖Android、iOS以及Windows等多个平台。 首先,我们来看Adobe Flash Builder 4.5...

    AdMobAne:适用于 Air 应用程序的 AdMob 原生扩展

    适用于 Adob​​e Air 的 Admob 原生扩展 此 AdMob 将添加对通过 Adob​​e Air 使用 AdMob 移动货币化平台的支持。 该扩展支持 Android 平台和 iOS 平台。 根据应用目标提供不同的包: 仅限安卓 iOS 奥利奥 两个...

    flash as3 Air for ios 应用内支付 IPA ANE

    ANE是Adobe Air的一个扩展机制,它允许开发者集成原生iOS代码,以访问iOS系统级别的API,如StoreKit,这些API在AS3中通常是不可用的。通过ANE,我们可以方便地在AS3代码中调用Objective-C或Swift编写的iOS内购服务。...

    admob ane android ios 稳定附例子详细教程

    【描述】中的"adobe air 的admob 本机扩展包括 android & iphone ipad all in one 版"指的是这个教程提供的ANE文件是跨平台的,不仅支持Android设备,还同时兼容iPhone和iPad,这意味着开发者可以一次编写,到处运行...

    QR码扫描(flex原生扩展)

    原生扩展是Adobe AIR的一个特性,它允许开发者使用本地代码(如Java、C++或Objective-C)来扩展AIR应用程序的功能。通过ANE,Flex应用可以直接调用设备的硬件特性,如摄像头、GPS或蓝牙,而无需完全依赖于Flash ...

    Developing iOS Applications with Flex 4.5.pdf

    4. **Adobe AIR for iOS**:Adobe AIR为iOS设备提供了一个虚拟机,它允许Flex应用以原生应用程序的形式运行。开发者需要了解如何配置AIR项目设置,以便正确打包和签名应用,使其符合App Store的发布要求。 5. **...

    IOS-安卓内购 for air

    本教程主要聚焦于如何在Adobe Air框架下实现跨平台的iOS和Android内购功能。Adobe Air允许开发者使用Flash技术创建原生的移动应用程序,它支持多种操作系统,包括iOS和Android。 一、iOS内购 1. **配置App Store ...

    ANE打包AIR扩展示例

    在本文中,我们将深入探讨如何使用Adobe AIR(Adobe Integrated Runtime)和ANE(AIR Native Extensions)进行打包,以创建本机扩展并提供一个完整的使用示例。ANE是AIR框架的一个强大特性,它允许开发者利用本地...

Global site tag (gtag.js) - Google Analytics