1.FlashBuilder4.6とAnettyでiOSで動くANEサンプルアプリを作成する(リンク先へ)
2.SWCを作成する(リンク先へ)
3.aファイルを作成する(リンク先へ)
4.ANEttyでaneファイルを作成する(リンク先へ)
5.as3でサンプルファイルを作成する(リンク先へ)
package { import example.ane.HelloWorldExtension; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFormat; [SWF(width = '320', height = '480', backgroundColor = '#000000', frameRate = '60')]//iPhone3GS public class HelloWorldMobile extends Sprite { private var _text:TextField; private var extension:HelloWorldExtension = new HelloWorldExtension(); public function HelloWorldMobile() { super(); stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; addEventListener(Event.ADDED_TO_STAGE,addedToStageHandler); } protected function addedToStageHandler(event:Event):void { removeEventListener(Event.ADDED_TO_STAGE,addedToStageHandler); main(); } private function main():void { //Button var blueBox:Sprite = box(0x0000ff,100,32); blueBox.addEventListener(MouseEvent.CLICK,blueBoxClickHandler); addChild(blueBox); //Text _text = textField(); _text.width = stage.stageWidth; _text.y = blueBox.height; addChild(_text); } protected function blueBoxClickHandler(event:MouseEvent):void { _text.text = extension.getHelloWorld(); } private function box(color:uint,_width:Number,_height:Number=0):Sprite { _height ||= _width; var _sprite:Sprite = new Sprite(); _sprite.graphics.beginFill(color); _sprite.graphics.drawRect(0,0,_width,_height); _sprite.graphics.endFill(); return _sprite; } private function textField():TextField { var textFormat:TextFormat = new TextFormat(); textFormat.color = 0xffffff; textFormat.size = 24; textFormat.font = "DroidSans"; var textField:TextField = new TextField(); textField.defaultTextFormat = textFormat; return textField; } } }ビルドに成功したら、次はリリースビルドを行いipaファイルを作成します。
#importHelloWorldANE.m#import "FlashRuntimeExtensions.h" @interface HelloWorldANE : NSObject @end FREObject GetHelloWorld( FREContext ctx, void* funcData, uint32_t argc, FREObject arg[] ); void ContextInitializer( void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet ); void ContextFinalizer(FREContext ctx); void ExtInitializer( void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet ); void ExtFinalizer(void* extData);
#import "FlashRuntimeExtensions.h" #import "HelloWorldANE.h" @implementation HelloWorldANE - (id)init { self = [super init]; if (self) { // Initialization code here. } return self; } @end FREObject GetHelloWorld(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { const char *str = "HelloWorld"; FREObject retStr; FRENewObjectFromUTF8(strlen(str)+1, (const uint8_t *)str, &retStr); return retStr; } void ContextInitializer(void* extData, const uint8_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*)"GetHelloWorld"; func[0].functionData = NULL; func[0].function = &GetHelloWorld; *functionsToSet = func; } void ContextFinalizer(FREContext ctx) { return; } void ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet) { *extDataToSet = NULL; *ctxInitializerToSet = &ContextInitializer; *ctxFinalizerToSet = &ContextFinalizer; } void ExtFinalizer(void* extData) { return; }
package example.ane { import flash.events.EventDispatcher; import flash.external.ExtensionContext; import flash.system.Capabilities; public class HelloWorldExtension extends EventDispatcher { private var context:ExtensionContext; public function HelloWorldExtension() { context=ExtensionContext.createExtensionContext("example.ane", "type"); } public function getHelloWorld():String { try{ return context.call("GetHelloWorld") as String; } catch(e:Error){ } return null; } public function dispose():void { return context.dispose(); } } }