在windows環境下使用adobe air 的本機擴充ane的一些心得

來源:互聯網
上載者:User

下文是我對如何在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.say是test1類的方法。

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.dll的test方法代碼:

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.測試後直接發布,不需要你修改設定檔。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.