Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ane

453 views

Published on

adobe ANE introduction

Published in: Technology, Education
  • Be the first to comment

Ane

  1. 1. AIR NATIVE EXTENSION Claire Chang
  2. 2. WHAT’S ANE • Adobe AIR 原⽣生擴充功能的 ActionScript API,可讓您存取以原⽣生 程式碼進⾏行程式設計的特定裝置功 能。 • 原⽣生擴充功能是以下的組合: • ActionScript 類別。 • 原⽣生程式碼。 • 例如,有⼀一種原⽣生擴充功能可讓 AIR 應⽤用程式存取 Android 震動功能。
  3. 3. 下載現成的ANE • ane的網站
 http://extensionsforair.com/ • 官⽅方的ane
 http://www.adobe.com/devnet/air/native- extensions-for-air.html
  4. 4. NATIVEEXTENSION結構及原理 ⼀一個NativeExtension項 ⺫⽬目主要有兩個部分組 成:As 端的庫項⺫⽬目和 底層代碼的實現項⺫⽬目。
  5. 5. ACTION SCRIPT 類別項⺫⽬目 • 在AS的Library部分,開發者需要定義要開發的ANE,在Action Script 中會被呼叫到的API界⾯面 • 這些API的具體實現會在相應的Java程式中被實作。 • 在AS部分最核⼼心的類別是ExtensionContext,負責與Java程式的溝通。 • ExtensionContext會呼叫createExtensionContext⽅方法創建和初始化Java 端的原⽣生程式。 • ExtensionContext的call⽅方法會呼叫具體的Java⽅方法並獲得返回結果。 • 同時Extension還會接受從java拋出的事件。
  6. 6. JAVA類別項⺫⽬目 - 1 • 在Java實現部分需要引⼊入AIR SDK中的FlashRuntimeExtensions.jar進⾏行 開發。 • 最主要的三個類別是:FREExtension,FREContext和FREFunction • 上⾯面三個接⼝口都包含在FlashRuntimeExtensions.jar裡。 • FREExtension • FREExtension是java端⾃自定義代碼的⼊入⼝口,是⼀一接⼝口,需要⽤用⼾戶重 寫createContext⽅方法從⽽而獲得本地代碼的內容。 • AS庫項⺫⽬目部分的ExtensionContext的createExtensionContext⽅方法就 會調⽤用FREExtension的getContext來獲得在java裡所撰寫的內容。
  7. 7. JAVA類別項⺫⽬目 - 2 • FREContext • FREContext是是本地擴展的具體內容的提供者。我們需要重寫getFunctions⽅方法, 從⽽而返回本地擴展的具體的實現函數。 • FREContext也會提供⼀一些與app相關的API以⽅方便開發 • FREFunction • FREFunction是本地⽅方法的具體實現。FREFunction是⼀一個接⼝口,提供了call⽅方法。 在AS端的ExtensionContext中調⽤用的call⽅方法都會對應到具體的FREFunction的call⽅方 法。 • FREContext的getFunctions函數會返回⼀一個Map,其key為⼀一個⾃自定義的String, value是具體的FREFunction。 • 通過getFunction⽅方法。AIR Runtime通過getFunction將AS端的call(key,args)⽅方法和java 端具體的FREFunctions的call(args)⽅方法進⾏行對應。
  8. 8. 準備⼯工作 • 開始之前確保以下軟體都已經安裝 • Flash Builder 4.6 • AIR SDK 3 • Flex SDK 4.6 • 原⽣生語⾔言⽅方所需的Extensions • Android:FlashRuntimeExtensions.jar
 位置:${FB_HOME}sdks4.6.0libandroidFlashRuntimeExtensions.jar • iOS:FlashRuntimeExtensions.h
 位置:${FB_HOME}sdks4.6.0includeFlashRuntimeExtensions.h
  9. 9. ANDROID的ANE開發 2. 將項⺫⽬目的類型設為 Library型 1. 在eclipse中新建⼀一個Android項⺫⽬目,設置好專案名稱,注 意不要勾選創建Activity。
  10. 10. 3. 開啟⼀一個android專案,將FlashRuntimeExtensions.h加⼊入 libraries
  11. 11. FREEXTENSION 接⼝口類和AIR程序對接
  12. 12. FRECONTEXT
  13. 13. FREFUNCTION
  14. 14. 輸出成.JAR檔
  15. 15. FLASH端的對應程式 記得要選擇這個
  16. 16. 實作ANE要讓AS呼叫的⽅方法 extension.xml NotificationInterface.as
  17. 17. IOS的部份 • 開啟⼀一個CocoaTouch Static Library的專案 ! ! ! ! ! ! ! ! • 將FlashRuntimeExtensions.h拉⼊入專案中
  18. 18. • 在.m檔裡import檔案
 #import "FlashRuntimeExtensions.h" • 實作LNGenericANEInitializer⽅方法 // // The extension initializer is called the first time the ActionScript side of the extension // calls ExtensionContext.createExtensionContext() for any context. ! void LNGenericANEInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet) { NSLog(@"Entering ExtInitializer()"); *extDataToSet = NULL; *ctxInitializerToSet = &LNGenericANEContextInitializer; *ctxFinalizerToSet = &LNGenericANEContextFinalizer; NSLog(@"Exiting ExtInitializer()"); } 指定初始化和結束Context的函式
  19. 19. • 實作Context初始化程式 // The context initializer is called when the runtime creates the extension context instance. void LNGenericANEContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) { NSLog(@"Entering ContextInitializer()"); *numFunctionsToTest = 1; FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction) * 1); func[0].name = (const uint8_t*)"helloWorld"; func[0].functionData = NULL; func[0].function = &helloWorld; *functionsToSet = func; NSLog(@"Exiting ContextInitializer()"); } • 實作函式內容 FREObject helloWorld(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { NSLog(@"Entering hellowWorld()"); // Create Hello World String NSString *helloString = @"Hello World!"; // Convert Obj-C string to C UTF8String const char *str = [helloString UTF8String]; // Prepare for AS3 FREObject retStr; FRENewObjectFromUTF8(strlen(str)+1, (const uint8_t*)str, &retStr); // Return data back to ActionScript return retStr; }
  20. 20. 參考資料 • 【技術】Flash Air Native Extension 應⽤用
 http://lets-make-games.blogspot.tw/2013/03/flash-air-native-extension.html • AIR For Native Extension 創建⼼心得
 http://ez2code.blogspot.tw/2012/03/air-for-native-extension.html • 官⽅方pdf⼿手冊
 http://www.adobe.com/content/dam/Adobe/en/devnet/devices/pdfs/ DevelopingActionScriptExtensionsForAdobeAIR.pdf • Extending Adobe AIR
 http://www.adobe.com/devnet/air/articles/extending-air.html • Building a native extension for iOS and Android
 http://www.adobe.com/devnet/air/articles/building-ane-ios-android-pt1.html • Adobe Flash Platform
 http://help.adobe.com/en_US/air/extensions/index.html
  21. 21. 謝謝⼤大家

×