在windows环境下使用adobe air 的本机扩展ane的一些心得

下文是我对如何在windows环境下使用adobe air的本机扩展(ane)的一些心得。

本文针对flashcs5.5,cs6中对ane的支持已经有很大的提高。

一、官方帮助

http://help.adobe.com/zh_CN/air/build/index.html

主要参考:

1.针对 Adobe AIR 开发本机扩展

2.构建 Adobe AIR 应用程序

本文很多内容都来自这两个帮助文件。

二、官方网站上的一些ane

http://www.adobe.com/devnet/air/native-extensions-for-air.html

我主要参考了其中的icu

http://blogs.adobe.com/globalization/invoking-icu-from-adobe-air-applications-part-2-using-flash-builder-4-6/

二、ane的作用

1.本机代码实现提供对特定于平台的功能的访问。这些特定于平台的功能在内置 ActionScript类中不可用,也无法在特定于应用程序的 ActionScript 类中实现。本机代码实现可以提供此类功能,因为它可以访问特定于设备的硬件和软件。

2.本机代码实现有时可能比仅使用 ActionScript的实现速度更快。

三、ane的使用

SWC 文件一样,ANE文件也是一个 ActionScript 类库,包含归档格式的 SWF文件和其他资源文件。以我自己建立的yt.ane(其实也是zip格式)为例,里面主要包括了一个library.swf文件 yt.dll文件。

使用方法和使用swc文件是一样的,我简单用flash cs5.5建立一个 air 项目,在时间轴里输入如下代码

var yt:test1 = new test1();

mytext.text = yt.say();

以下来《自构建 AdobeAIR 应用程序》

1.在应用程序描述符文件中声明扩展

所有 AIR 应用程序都具有应用程序描述符文件。当应用程序使用本机扩展时,应用程序描述符文件包含一个

素。例如:

<extensions>

<extensionID>test1</extensionID>

</extensions>

extensionID 元素的值与扩展描述符文件中的 id元素的值相同。扩展描述符文件是一个名为 extension.xml的文件打包在 ANE 文件中。您可使用归档提取器工具查看 extension.xml文件。

2.如果应用程序使用本机扩展,请在库路径中包含本机扩展的ANE文件。然后可以使用Flash Professional CS5来编译ActionScript代码。请执行以下操作:

1 ANE 文件的文件扩展名从 .ane更改为 .swc。必须执行此步骤,以便 Flash Professional可以找到文件。

2 FLA 文件中,选择“文件”>ActionScript设置”。

3 在“高级 ActionScript 3.0设置”对话框中,选择“库路径”选项卡。

4 选择“浏览到 SWC 文件”按钮。

5 浏览到 SWC 文件,然后选择“打开”。

现在,SWC 文件将会显示在“高级 ActionScript 3.0设置”对话框的“库路径”选项卡中。

6 选择 SWC 文件后,再选择“为库设置链接选项”按钮。

7 在“库路径项目选项”对话框中,将“链接类型”更改为“外部”。

完成上面的工作后就可以使用ane

我简单用flashcs5.5 建立一个 air项目,在时间轴里输入如下代码

var yt:test1 = new test1();

mytext.text = yt.say();

代码说明:

mytext是一个动态文本,yt.saytest1类的方法。

yt.say调用 yt.dll里的test方法

test1(as3)代码

package

{

      

       importflash.events.EventDispatcher;

       importflash.external.ExtensionContext;

       publicclass test1

       {

              private static varcontext:ExtensionContext;

              publicfunction test1()

              {

                     super();

                    

                     try

                     {

                            context= ExtensionContext.createExtensionContext("test1", "");

                                          }

                     catch(e:Error)

                     {

                     }

              }

             

              publicfunction say():String

              {

                    varstr:String = context.call("test") as String;

                     returnstr;

              }

             

       }

}

yt.dlltest方法代码:

FREObject test(FREContext ctx, void*funcData, uint32_t argc, FREObject argv[])

{

       constuint8_t* msg = (const uint8_t*)"hello world";

       FREObjectretObj;

   FRENewObjectFromUTF8(strlen((const char*)msg)+1, msg, &retObj);

       returnretObj;

}

运行的结果是显示helloworld

3.ane打包

flash cs.5.5内无法直接运行这个程序,必须要打包

可以新建bat文件来打包,我的打包语句如下,详细请参考官方文档。

"D:\Program Files\adobe\Adobe FlashCS5.5\AIR3.2\bin\adt" -package -storetype pkcs12 -keystore yt.p12 -target bundle myApp.exe application.xmlapp.swf -extdir extensionsDir

这样将所有的文件都打包到一个文件夹下,可以直接点击文件查看效果

======================================================

一、使用 C 语言编写本机端代码(dll文件)

代码如下

#include"FlashRuntimeExtensions.h"

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

extern "C" __declspec(dllexport)void ExtInitializer(void** extDataToSet, FREContextInitializer*ctxInitializerToSet,

                                   FREContextFinalizer*ctxFinalizerToSet);

extern "C" __declspec(dllexport)void ExtFinalizer(void* extData);

extern "C" __declspec(dllexport)FREObject test(FREContext ctx, void* funcData, uint32_t argc, FREObjectargv[]);

void ContextInitializer(void* extData, constuint8_t* ctxType, FREContext ctx,

                                          uint32_t*numFunctionsToTest, const FRENamedFunction** functionsToSet)

{

       *numFunctionsToTest= 1;

       FRENamedFunction*func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*1);

      

      

       func[0].name= (const uint8_t*)"test";

       func[0].functionData= NULL;

       func[0].function= &test;

       *functionsToSet= func;

}

FREObject test(FREContext ctx, void*funcData, uint32_t argc, FREObject argv[])

{

       constuint8_t* msg = (const uint8_t*)"Hello world";

       FREObjectretObj;

    FRENewObjectFromUTF8(strlen((constchar*)msg)+1, msg, &retObj);

       returnretObj;

}

void ContextFinalizer(FREContext ctx) {

       return;

}

__declspec(dllexport) voidExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet,

                                   FREContextFinalizer*ctxFinalizerToSet) {

       *extDataToSet= NULL;

       *ctxInitializerToSet= ContextInitializer;

       *ctxFinalizerToSet= ContextFinalizer;

}

__declspec(dllexport) voidExtFinalizer(void* extData) {

       return;

}

编辑生成 yt.dll文件

代码注释:

1.      "FlashRuntimeExtensions.h"以及相应的FlashRuntimeExtensions.lib可在 AIRSDK目录中获得。

2.      对于 Windows 设备,请作为 DLL 文件提供库。将lib/windows 目录的 AIR SDK 目录中的库 FlashExtensions.lib 动态链接到您的DLL。此外,如果您的本机代码库使用 Microsoft 的任何 C 运行时库,请链接到 C 运行时库的多线程、静态版本。要指定此类型的链接,请使用 /MT 编译器选项。

3.      其它的内容参见官方帮助。

二、构建swc 文件

As代码

package

{

       /**

       * ...

       * @author yt

       */

       importflash.events.EventDispatcher;

       importflash.external.ExtensionContext;

      

       publicclass test1

       {

             

              privatestatic var context:ExtensionContext;

              publicfunction test1()

              {

                     super();

                    

                    

                    

                     try

                     {

                            context= ExtensionContext.createExtensionContext("test1", "");

                           

                     }

                     catch(e:Error)

                     {

                     }

              }

             

              publicfunction say():String

              {

                     varstr:String = context.call("test") as String;

                     returnstr;

              }

             

       }

}

tes1.swc文件

三、打包成ane

"D:\Program Files\adobe\Adobe FlashCS5.5\AIR3.2\bin\adt" -package -target ane yt.ane yt.xml -swc test1.swc -platform Windows-x86library.swf yt.dl

1.      Library.swf可从test1.swc中获得。

2.      yt.xml中的内容

<extensionxmlns="http://ns.adobe.com/air/extension/3.2">

   <id>test1</id>

   <versionNumber>1.0.0</versionNumber>

   <platforms>

       <platform name="Windows-x86">

           <applicationDeployment>

               <nativeLibrary>yt.dll</nativeLibrary>

               <initializer>ExtInitializer</initializer>

               <finalizer>ExtFinalizer</finalizer>

           </applicationDeployment>

       </platform>

   </platforms>

</extension>

===============================================================

flash cs6中使用ane(windows本机扩展)

1.新建air项目,

2.加入ane文件

菜单文件 --->actionscript 设置

选中ane文件加入



3.设置air

安装程序和嵌入运行时的应用程序可任选一个

在windows环境下使用ane必须选中扩展桌面

4.可直接在flash cs6中测试。

5.测试后直接发布,不需要你修改配置文件。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值