Adobe AIRでは様々なOS上で動作するクロスプラットフォームのアプリケーション開発が可能ですが、一方でOS固有の機能やデュアルスクリーンのような端末独自の機能はAIR上からアクセスできませんでした。しかし、AIR3では新機能として「ネイティブ拡張(Native Extensions)」が追加され、ネイティブコードと連携してこれらの機能を利用できるようになりました。本記事では、年内リリース予定のFlash Builder 4.6においてネイティブ拡張を利用する方法について解説します。

記事内で利用しているANEファイル(Vibration.ane)は、「Vibration native extension sample」からダウンロードできます。その他にも、「Native extensions for Adobe AIR」から様々なANEファイルを入手できます。

ネイティブ拡張とは

ネイティブ拡張とは、ネイティブコードでプログラミングされたOS/端末独自の機能へのアクセスを提供する仕組みで、実体は「.ane」という拡張子のファイル(ANEファイル)にパッケージングされます。ANEファイルは、AndroidならJava、iOSならObjective-Cのようなネイティブコードと、それらとAIRとの受け渡しをするActionScript 3.0を含んだ、SWCのようなアーカイブファイルです。

使い方もSWCと同じように、ANEファイルへのパスを通してパッケージングすると、ネイティブ拡張を利用したAIRアプリケーションを書き出すことができます。執筆時点では、コマンドライン上でADT(AIR Developer Tool)を使ってパッケージングする必要がありますが、Flash Builder 4.6ではANEファイルの設定タブが用意され、その作業は格段に容易になります。

※ネイティブ拡張の概要の詳しい情報は「ネイティブ拡張(Native Extensions)入門」をご覧ください。

Flash Builder 4.6でANEファイルを設定する

Flash Builder 4.6では、新規プロジェクトを作成する際のウィザードに、ANEファイルへのパスを設定するタブが増えました。このタブは[プロパティ]→[Flexビルドパス]でも確認できます。

図2の[ANEを追加]ボタンをクリックすると、図3のダイアログが表示されます。[AIRアプリケーション記述子を更新]にチェックを入れておくと、アプリケーション記述子ファイル(xxx-app.xml)に以下のようなタグが自動的に追加されます。

<extensions> <extensionID>com.adobe.Vibration</extensionID> </extensions>

ネイティブ拡張を利用するときは、アプリケーション記述子ファイルにextensionIDを設定する必要があります。extensionIDは、ネイティブ拡張を一意に表すIDであり、同じIDのネイティブ拡張を複数利用することはできません。

ターゲットOSの自動判定

Flash Builder 4.6ではANEファイル追加時に、そのANEファイルがアプリケーションのターゲットOS(Windows/Mac OS/iOS/Android/BalckBerry)に対応しているか、自動で判定してくれます。

図4は、Vibration.aneというモバイル端末のバイブレーション機能を利用するためのANEファイルを設定したところです。Vibration.aneはiOS/Androidに対応したANEファイルなので、iOS/Android向けのモバイルプロジェクトでの追加時には「緑のチェック(緑のチェック)」が表示され、利用可能な状態であることがわかります。一方で、デスクトップ向けアプリケーションで同じANEファイルを追加したときは、「赤い×印(赤い×印)」で利用できない旨が通知されます。

「AIRシミュレーターはサポートされていません」という警告メッセージは、モバイルアプリケーションのデスクトップシミュレーター上では、このネイティブ拡張は機能しない旨を指しています。なお、デスクトップ向けのANEファイルであれば、シミュレーター上でも機能します。

※図4にある「AIRランタイムの最低必要バージョン:2.5」というメッセージは、「ANEファイルがAIR2.5以上から利用できるフォーマットになっている」という意味です。AIRのバージョンによって、ネイティブ拡張を利用できるプラットフォームの種類が異なるのでご注意ください。

ネイティブ拡張をActionScript 3.0から使用する

ANEファイルを追加すると、ActionScript 3.0でその機能を呼び出すことが可能になります。コード補完も効くようになっており、ネイティブ拡張のプロパティや関数の呼び出しも簡単です。また、ネイティブ拡張利用時のデバッグも通常通りFlash Builder 4.6上で行えます。以下はVibration.aneを利用して、ボタンクリックで2秒間のバイブレーションを鳴らすコードです。

import com.adobe.nativeExtensions.Vibration; // ボタンをクリックしたら、2秒バイブレーションを鳴らす protected function vibrateDeviceBtn_clickHandler(event:MouseEvent):void{ // 端末がバイブレーションをサポートしているか、の確認 if(Vibration.isSupported){ var vb:Vibration=new Vibration(); // 2秒バイブレーションの鳴らす vb.vibrate(2000); } }

AIRのパッケージ時のANEファイル設定

リリースビルドを書き出す際や、[プロパティ]→[Flexビルドのパッケージ化]で、ターゲットOSごとにANEファイルのパッケージ設定を行いますが、この時にも自動的に検証を行ってくれます。図5の例では、上記のコードのようにActionScript 3.0でネイティブ拡張を呼び出しているのに、該当するANEファイルをパッケージに含んでない旨が通知されています。

[使用済み]の欄は、ActionScript 3.0からネイティブ拡張を使用している場合は「鎖(鎖)」マーク、未使用の場合は「バツ(バツ)」マーク、その他不明なときは「はてな(はてな)」マークが表示され、未使用の不要なANEファイルをパッケージに含めないようにすることができます。

その他、以下のような項目を自動検証してくれます。

自動検証する項目
Extension ID 複数のネイティブ拡張の利用時に同一のIDではないか、など。
Native Library 複数のネイティブ拡張の利用時に同一のネイティブライブラリ(.jarや.aなど)を含んでいないか、など。
Initializer 初期化時に呼び出される関数やクラスが存在するか。
Finalizer 終了時に呼び出される関数やクラスが存在するか。

おわりに

本記事では、AIR3の新機能「ネイティブ拡張」をFlash Builder 4.6で利用する方法を紹介しました。ネイティブ拡張によって、様々な機能が使えるようになっただけでなく、ネイティブコードで作られたライブラリなどの資産の活用、また負荷の高い処理をネイティブコードで処理することでのパフォーマンス向上が期待できます。

また、Flash Builder 4.6で開発すれば、ANEファイル設定時に様々な項目を自動的に検証してくれますし、コード補完もデバッグも通常通り行えるので、ネイティブ拡張を利用した開発も一段としやすくなると思います。一方でネイティブ拡張自体を開発するにはネイティブコードの知識はもちろん必要ですし、ANEファイルにパッケージングするまでに手順が複雑なのが難点です。ネイティブ拡張自体の開発についての詳細な情報は「ネイティブ拡張(Native Extensions)入門 」を参照してください。

関連情報

ネイティブ拡張(Native Extensions)入門

 

ネイティブ拡張(Native Extensions)入門 第1回 ネイティブ拡張を理解する