...

使用スライドファイル

by user

on
Category: Documents
10

views

Report

Comments

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
Fly UP