来自 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类添加了新的方法。如下例所示:
- import flash.external.ExtensionContext;
- ...
- private var ext:ExtensionContext;
- ...
- ext = ExtensionContext.createExtensionContext("com.adobe.appPurchase","");
在这个例子里,ExtensionContext通过静态方法createExtensionContext()来获得一个实例,参数com.adobe.appPurchase是这个扩展的ID,它非常重要,在扩展的配置文件里和应用程序描述文件中都需要用这个ID进行配对。
调用原生类中定义的方法可以用方法call()来实现,由于是同步调用,所以函数可以有返回值。如在原生类中定义的方法finish,可以用下面的代码来调用。
- var result:Object = ext.call("finish");
我们还可以给ExtensionContext类添加事件侦听,用来获取从原生类中派发回来的事件。
- ext.addEventListener(StatusEvent.STATUS,onStatus);
- public function onStatus(e:StatusEvent):void{
- switch(e.code){
- case "removeTransaction":
- ...
- }
- }
Objective-C 扩展
接下来是原生类的部分,如果你注册成为苹果iOS开发者,那么你可以在苹果开发者网站上免费下载Object-C的开发工具XCode。关于如何注册成为苹果iOS开发者,请参考我的这篇文章,如何成为一个合法的iOS开发者。
总的来说,Objective-C 虽然语法比较奇怪,但只要掌握了基本的规则,还是和ActionScript一样易懂。OBJC扩展类需要引入一个FlashRuntimeExtension.h类包,它实现了和ActionScript沟通的接口。
引入FlashRuntimeExtension.h之后,可以用下面的代码定义一个FREObject方法,FREObject是接口类型。这里要注意,与AS的接口包括函数返回值,都要定义成FREObject类型,比如代码中的retVal。
- FREObject finishTransaction1(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
- NSLog(@"Finish Transaction Called");
- BOOL matchFound = NO;
- const uint8_t* str = nil;
- uint32_t len = -1;
- ......
- FREObject retVal;
- if(FRENewObjectFromBool(matchFound, &retVal) == FRE_OK){
- return retVal;
- }else{
- return nil;
- }
- }
要把FREObject方法定义成接口,还需要在ContextInitializer方法内进行配置,如下:
- //这里是需要定义的接口的数量
- *numFunctionsToTest = 6;
- //定义一个FRENamedFunction类型的实例func,初始化函数的个数
- FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*6);
- //定义一个接口,name是字符串"getProducts",函数体是getProducts
- func[0].name = (const uint8_t*)"getProducts";
- func[0].functionData = NULL;
- func[0].function = &getProducts;
- func[1].name = (const uint8_t*)"startPayment";
- func[1].functionData = NULL;
- func[1].function = &startAppPayment;
- func[2].name = (const uint8_t*)"finish";
- func[2].functionData = NULL;
- func[2].function = &finishTransaction1;
- func[3].name = (const uint8_t*)"muted";
- func[3].functionData = NULL;
- func[3].function = &muted;
- func[4].name = (const uint8_t*)"restore";
- func[4].functionData = NULL;
- func[4].function = &restoreTrans;
- func[5].name = (const uint8_t*)"trans";
- func[5].functionData = NULL;
- func[5].function = &getTrans;
- *funcfunctionsToSet = func;
- ....
而ContextInitializer方法,是在原生扩展类的初始化函数ExtInitializer中指定的:
- void ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet,
- FREContextFinalizer* ctxFinalizerToSet) {
- NSLog(@"Extension Initialized");
- *extDataToSet = NULL;
- *ctxInitializerToSet = &ContextInitializer;
- *ctxFinalizerToSet = &ContextFinalizer;
- }
ExtInitializer是原生扩展的程序入口,它可以通过扩展配置文件extension.xml来定义:
- com.adobe.appPurchase
- libAppPurchase.a
- ExtInitializer
- 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发布设置生成。
一切就绪后便可以使用命令行进行打包,注意路径,下例路径为当前文件夹。
- 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中,需要对扩展追加一个定义:
- com.adobe.appPurchase
这里可以看到,在AS扩展类、扩展配置文件extension.xml和应用描述文件info-app.xml中都指定了一个统一扩展的ID: com.adobe.appPurchase。
利用下面的命令行可以打包生成Main.ipa:
- 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 API进行数据存储、网络通信以及设备访问。 在实际应用方面,ADOBE AIR广泛应用于游戏开发、桌面工具、教育软件等各个领域。例如,许多流行的手机游戏如“愤怒的小鸟”最初就是...
4. **PDF文档的价值**:“[使用AdobeAIR开发Android应用程序].PDF”可能包含详细的教程和指南,涵盖了从环境设置到实际编程的全过程,可能包括Air SDK安装、Flex Builder或IntelliJ IDEA的使用、打包和发布应用等...
Adobe Air 的广告原生扩展 此广告 ANE 添加了对使用 Adobe Air 的所有主要移动系统和流行广告网络的支持。 支持IOS、安卓和Kindle。 由带给您。 感谢我们的支持者。 Michał Moczyński 马库斯弗雷泽 德怀特....
Adobe Air 的核心优势在于跨平台特性,开发人员无需针对不同的操作系统编写特定的代码,而是可以面向 AIR 运行时进行开发,这降低了管理各种设备系统复杂低级别 API 的需要。对于 Flash 开发团队来说,Adobe Air ...
本主题将深入探讨如何使用AIR本机扩展(ANE)与iOS和Android设备的系统卷进行交互。 1. **AIR本机扩展(ANE)**: - AIR本机扩展是Adobe AIR框架的一部分,它允许开发者利用本地设备的功能,如硬件加速、访问系统...
3. **Adobe AIR**:Adobe AIR(Adobe Integrated Runtime)允许开发者使用Flash技术创建跨平台的应用程序,包括在iOS设备上运行的APP。AIR提供了iOS SDK,使得Flash内容能在iOS设备上运行。 4. **iOS SDK集成**:...
### 使用Adobe AIR开发Android应用:详细入门教程 随着移动设备的普及和技术的发展,越来越多的应用程序被开发出来以满足用户在不同场景下的需求。Adobe AIR(Adobe Integrated Runtime)是一种跨平台的应用程序...
用于核心移动系统 API 的 AIR 本机扩展 获取设备标识符 发送消息(日志、通知) 监听传感器 先决条件 JDK(通用) 设置JAVA_HOME环境。 变量是必不可少的 Gradle(普通) 设置GRADLE_HOME环境。 变量是必不可少...
通过 Adobe AIR 运行时,开发人员可以将同一代码打包到 Windows 和 Mac OS 桌面设备以及 iOS 和 Android 设备的原生应用程序和游戏中,范围覆盖 5 亿多台设备上的 10 亿多桌面系统和移动应用程序商店。
:) ios 状态栏使用 ane 文件刷新本机扩展。 ios7 状态栏错误解决方案已修复。 ios7 cameraroll as there after status bar not refresh 修复了错误解决方案。 Adobe Air i0S7 StatusBar Overlays 阶段,修复了 Adob...
1. **本机扩展(ANE)**:ANE文件允许AIR应用程序调用平台特定的原生代码,扩展AIR的功能范围。 2. **本机扩展与ActionScript类库**:通过SWC文件,可以在ActionScript中调用ANE提供的功能。 3. **支持的设备和...
Adobe AIR(Adobe Integrated Runtime)允许开发者使用ActionScript 3或Flex构建桌面和移动设备的应用程序,它具有广泛的兼容性,覆盖Android、iOS以及Windows等多个平台。 首先,我们来看Adobe Flash Builder 4.5...
适用于 Adobe Air 的 Admob 原生扩展 此 AdMob 将添加对通过 Adobe Air 使用 AdMob 移动货币化平台的支持。 该扩展支持 Android 平台和 iOS 平台。 根据应用目标提供不同的包: 仅限安卓 iOS 奥利奥 两个...
ANE是Adobe Air的一个扩展机制,它允许开发者集成原生iOS代码,以访问iOS系统级别的API,如StoreKit,这些API在AS3中通常是不可用的。通过ANE,我们可以方便地在AS3代码中调用Objective-C或Swift编写的iOS内购服务。...
【描述】中的"adobe air 的admob 本机扩展包括 android & iphone ipad all in one 版"指的是这个教程提供的ANE文件是跨平台的,不仅支持Android设备,还同时兼容iPhone和iPad,这意味着开发者可以一次编写,到处运行...
原生扩展是Adobe AIR的一个特性,它允许开发者使用本地代码(如Java、C++或Objective-C)来扩展AIR应用程序的功能。通过ANE,Flex应用可以直接调用设备的硬件特性,如摄像头、GPS或蓝牙,而无需完全依赖于Flash ...
4. **Adobe AIR for iOS**:Adobe AIR为iOS设备提供了一个虚拟机,它允许Flex应用以原生应用程序的形式运行。开发者需要了解如何配置AIR项目设置,以便正确打包和签名应用,使其符合App Store的发布要求。 5. **...
本教程主要聚焦于如何在Adobe Air框架下实现跨平台的iOS和Android内购功能。Adobe Air允许开发者使用Flash技术创建原生的移动应用程序,它支持多种操作系统,包括iOS和Android。 一、iOS内购 1. **配置App Store ...
ANE-ZzishSDK 是一个专为 Adobe AIR 开发者设计的原生扩展,它使得 iOS 和 Android 应用能够利用 Zzish SDK 的功能。Zzish SDK 是一个强大的工具集,通常用于教育应用程序,提供了数据收集、分析以及与硬件设备交互...