Comments
Description
Transcript
使用スライドファイル
ANE HandsOn Seminar #1 Hello World! 2012/1/28@Tokyo 1 自己紹介 HN : 柊(Hiiragi) Twitter : @Hiiragi3 Job : FlashDeveloper・・・だと思う。 2 まずは、ANEとはどんな物か、ざっくりと見てもらいましょう。 (MacによるNativeAlertのデモ) 3 ANE = AIR Native Extension AIRランタイムには実装されていない機能を、ネイティブコー ドで作られたライブラリによって補う(拡張する)機能です。 ネイティブアラートとか。 Kinectとの連携とか。 C2DM(Cloud to Device Messaging)によるプッシュとか。 4 ANEを使う理由 ネイティブの機能を使えるようになる。 ネイティブコード実装は ActionScript のみを使用する実装より も速い場合がある。 ネイティブコード実装によって既存コードを再利用できる。 5 NativeProcess AIR2からの機能。 アプリやバッチファイルを使ってネイティブを扱う。 ANEはdllやjarやらといったネイティブライブラリを使用。 extendsDesktopしか使えない。 別プロセスを使用するため、落ちるときに道連れにしない。 6 サポートされるデバイス Android デバイス(AIR 3 および Android 2.2 以降) iOS デバイス(AIR 3 および iOS 4.0 以降) AIR 3.0 をサポートする Windows デスクトップデバイス AIR 3.0 をサポートする Mac OS X デスクトップデバイス Blackberry PlayBook(AIR 2.7 以降) AIR for TV デバイス(AIR 2.5 for TV 以降) 7 ネイティブ実装の言語 Android --- Java + AndroidSDK or C + AndroidNDK iOS --- C Blackberry PlayBook --- C Windows --- C MacOS --- C AIR for TV --- C Cは C++, (Mac系なら)Objective-C, アセンブラも含みます。 8 一見難しそうですが・・・。 使い方は、SWCと全くと言っていいほど変わらないです。 (作るのは面倒ですが) 9 ANE AIR Application NativeHelloWorld.as function getHW():String { return 文字列; } _nhw = new NativeHelloWorld(); var result:String = _nhw.getHW(); 10 ANE AIR Application NativeHelloWorld.as function getHW():String { return 文字列; } _nhw = new NativeHelloWorld(); var result:String = _nhw.getHW(); この文字列をネイティブで作成 11 ANE AIR Application NativeHelloWorld.as function getHW():String { return _context.call(“getHW”) as String; } _nhw = new NativeHelloWorld(); ExtensionContext var result:String = _nhw.getHW(); FREObject getHW(FREContext ctx, void*funcData, uint32_t argc, FREObject argv[]) { { .... return 文字列; } NativeLibrary 12 作成順序 1. ANE-SWCの作成 2. ネイティブライブラリの作成 3. aneファイルの作成 4. AIRアプリの作成 13 ここからは、お渡ししたテキストをコピペしつつの解説となります。 (本当はコードをガリガリ書いてほしいのですが、時間が・・・) 14 作成順序 1. ANE-SWCの作成 2. ネイティブライブラリの作成 3. aneファイルの作成 4. AIRアプリの作成 15 作成順序 1. ANE-SWCの作成 2. ネイティブライブラリの作成 3. aneファイルの作成 4. AIRアプリの作成 16 絶対に外せない、基本概念 ExtensionInitializer ContextInitializer ContextFinalizer ExtensionFinalizer http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/ flash/external/ExtensionContext.html 17 ExtensionInitializer 初めてExtensionContext#createExtensionContext()が呼ばれた 際に、一度だけ、初期化するために呼ばれる。 別意見もあり・・・。 ここで、ContextInitializerとContextFinalizerがAIRランタイム に紐づけられる。 18 ContextInitializer ExtensionContext#createExtensionContext()を使用した際に呼ばれ る、コンテキストの初期化関数。 ここで、ASから呼び出すための関数が配列として1つ以上、コンテ キストに定義/紐付けされる。 ここで作られた「ネイティブ側のコンテキストに対応する、AS側の ExtensionContext型のインスタンス」が、AIRランタイム側から渡 される。 19 ContextFinalizer ExtensionContext.dispose()を使ったら呼ばれる関数。ネイティ ブ側のコンテキストを破棄する際に必要な処理を書く。 20 ExtensionFinalizer C API では、拡張をアンロードするときにランタイムが呼び出すための、 拡張ファイナライズ処理関数が提供されます。ただし、ランタイムが拡張 をアンロードするとは限りません。そのため、ランタイムは必ずしも拡張 ファイナライズ処理関数を呼び出すわけではありません。(ドキュメント より) 拡張データへアクセスするためのオブジェクトが引数で渡されるので、そ れのクリアーを行うなどの処理のためのもの。・・・でも、必ず呼ばれる わけではないのであれば、クリアーできる保証が無いってことで・・・。 21 何となくざっくりとした図解 ExtensionContext.createContext() AIRアプリ ② ③ ① 初回のみExtensionInitializer発動 ④ ランタイムに対して、ContextInitializerと ContextFinalizerへのポインタを渡す。 ネイティブのコンテキストに対応した contextデータが返ってくる ⑥ AIR ランタイム AS側 ネイティブ側 コンテキスト コンテキスト ContextInitializer発動 Contextデータを作成 ⑤ •ネイティブ関数の配列が含まれる。 • ASから呼び出される関数名 • その関数へのポインタ • ネイティブデータへのポインタ 注意:マニュアルには、「アプリケーションがロードされるタイミングでExtensionInitializerが実行される」という風に取れる記述もあり・・・。 あと、若干の予想も含まれております・・・。 22 作成順序 1. ANE-SWCの作成 2. ネイティブライブラリの作成 3. aneファイルの作成 4. AIRアプリの作成 23 作成順序 1. ANE-SWCの作成 2. ネイティブライブラリの作成 3. aneファイルの作成 4. AIRアプリの作成 24 いかがでしたでしょうか 今回のセミナー内容は、時間の都合上、かなりザックリとして る解説と作りになってます。 もし興味が出た方は、AdobeのANEマニュアルをご一読される 事をお勧めします。 http://help.adobe.com/ja_JP/air/extensions/index.html 25 ANEファイルの利点 ANEの事を知らなくても、第三者が作成したaneファイルを使 えば、AS3の使い方そのままで簡単にネイティブ機能を扱う事 が出来る。 複数のaneを組み合わせるなど、作り方がちゃんとしているane であれば柔軟な使い方が可能。 26 何が言いたいかと言うと 皆さんで実用的なライブラリを作って頂きたい。(笑 27 良き姉ANEライフを! 28 本日はお疲れさまでした! 29