Adobe Developer Connection(ADC)と連動する開発者向けイベント「ADC MEETUP ROUND3」では、General Sessionの他にHTML関連情報とFlash関連情報の2つのトラックが設けられた。FlashトラックのSession3では、大日本印刷株式会社の丸山真実氏により、Adobe AIR 3で新しく追加されたCaptive Runtimeとネイティブ拡張(Native Extensions)について、年内リリース予定のFlash Builder 4.6の使い方を交えて紹介が行われた。

1 Captive Runtime AIRランタイムとAIRアプリケーションが1つに

従来のAIRアプリケーション(以下、AIRアプリ)の場合、ユーザが利用するためには、AIRアプリの他にAIRランタイム(以下、ランタイム)をインストールする必要があった。しかし、AIR 3で新しく追加されたCaptive Runtimeを使うと、AIRアプリの中にランタイムを同梱でき、各プラットフームに合わせて書き出せるようになる。つまり、Androidなら.apkに、Windowsなら.exeを含んだディレクトリに、Mac OSなら.appにランタイムを含めて書き出させるということだ。ちなみに、iOSはAIR 2.7からすでにCaptive Runtimeが可能になっている。

丸山氏はCaptive Runtimeのメリットとデメリットとして、以下の項目を挙げている。

Captive Runtimeのメリットとデメリット
メリット デメリット
  • 自己完結型のAIRアプリの作成が可能
  • 別途のランタイム再配布が不要
  • インターネットアクセス環境がなくてもインストール可能
  • インストールせずにUSBや光ディスクから実行可能
  • AIRアプリがランタイムアップデートから分離される
  • AIRアプリと任意のバージョンのランタイムの組み合わせを保証できる
  • NativeProcess APIを使用可能
  • ネイティブ拡張(Native Extensions)を使用可能
  • File.openWithDefaultApplication()関数を無制限で使用可能
  • アドビからセキュリティパッチが公開されても、自動で適用されない
  • .airファイル形式を使用できない
  • 要件によっては、独立したインストーラーの作成が必要
  • AIRアップデートAPIやフレームワークがサポートされていない
  • WebページからAIRアプリをインストールして起動するためのAIRブラウザーAPIがサポートされていない
  • ランタイムがAIRアプリに同梱されるため容量が大きくなる

 

「メリットとデメリットを把握した上で、どんなアプリケーションか、誰が使うのか、ターゲットのプラットフォームが何かを考慮して、Captive Runtimeを使うか使わないかを判断すればいい」と丸山氏は語る。

従来のAIRアプリはアドビが提供するランタイム環境で動かすアプリという印象だったが、Captive Runtimeを使うことで各プラットフォームのネイティブアプリのように扱えるようになり、AIRアプリの配布先がより明確になると感じた。

2 Flash Builder 4.6でCaptive Runtimeを使う方法

Flash Builder 4.5までは、Captive Runtimeを使うにはコマンドラインで設定する必要があるが、Flash Builder 4.6ではウインドウ上で簡単に設定できるようになっている。下図のように、書き出しオプションで従来の方法かCaptive Runtimeを使用する方法かを選ぶだけでいい。

3 ネイティブAPIが利用できるネイティブ拡張(Native Extensions)

様々なプラットフォームやデバイス環境で動作するAIRだが、その反面、ジャイロセンサー(gyro sensor)/バイブレーション(vibration)/ブルートゥース(bluetooth)などのプラットフォーム/デバイス固有の機能やAPIを利用することができなかった。しかし、AIR 3で新しく追加されたネイティブ拡張(Native Extensions)を使うと、AndroidならJava、iOSならObjective-CやC++などのネイティブコードとActionScript 3.0を連携させ、これらの固有の機能やAPIを利用することができるようになる。

ネイティブ拡張の仕組みを見ると、拡張機能はAIRアプリとランタイムの間に存在し、その中はネイティブコードとActionScript拡張クラス、そして関連リソースをパッケージ化したものが含まれている。

4 ネイティブ拡張ファイル(ANE)を作成する方法

ネイティブ拡張ファイルの拡張子は.aneとなり、図4.1のようにネイティブコード/ActionScript拡張ライブラリ/ネイティブ拡張記述ファイル/証明書とを一緒に、AIR 3 SDKに含まれているADT(AIR Developer Tool)を利用してパッケージングすると生成される。ANEは複数のネイティブコードをまとめてパッケージング可能なので、1つのANEファイルで複数のプラットフォームに対応することが可能だ。

続いて、丸山氏はANEファイルの作成デモを行った。「Hello World」という文字列をネイティブコード(Java)から返して表示するというものだ。Javaのコードでは、FREExtensionインターフェイスを実装(implements)したクラスの中で、FREContextを拡張(extends)したExtensionContextを生成する。また、ExtensionContextでは、ActionScript拡張ライブラリで呼び出す関数名と、FREFunctionインターフェイスを実装したExtensionFunctionを登録している。

最終的に下記のコマンドで、ネイティブコードをライブラリ化したjarファイルと、ActionScript拡張クラスをライブラリ化したswcファイルをパッケージして、ANEファイルを生成できる。

adt -package -storetype pkcs12 -keystore "署名.p12" -target ane "出力したいファイル.ane" "ネイティブ拡張記述ファイル.xml" -swc "ライブラリプロジェクトで作成したSWC.swc" -platform "ターゲットプラットフォーム(例:Android-ARM)" library.swf "ネイティブライブラリ.jar"

5 Flash Builder 4.6でANEファイルを使う方法

Flash Builder 4.6ではビルドパスの部分に[ネイティブエクステンション]タブが追加されていて、ANEファイルを追加することができる。[ANEを追加]ダイアログの[AIRアプリケーション記述子を更新]にチェックを入れると、登録されているネイティブ拡張IDをアプリケーション記述ファイルに自動で設定してくれる。

また、パッケージ設定では自動で「ANEファイルの使用/不使用」「ターゲットプラットフォームへの対応/非対応」などを検証してくれる。既に使用中のANEファイルについては使用済みの部分に「鎖」マークが表示されるので、このマークを見てリリースビルドの際に不要なファイルが整理できる。

Flash Builder上のActionScriptでANEを呼び出すと、ActionScript拡張ライブラリに設定した関数名がコードヒントで表示される。

「Flash Builder 4.6を使うと、コマンドよりも簡単に書き出せる上に、ANEの情報を取得してデバイスと正しく連携されるかの検証も自動にしてくれるので、使いやすくなっている」と丸山氏は語る。そして、ネイティブ拡張を使うメリットとして以下の3つを挙げた。

  • プラットフォーム/デバイス固有の機能にアクセスできる。
  • ネイティブコードの既存ライブラリを再利用できる。
  • ActionScriptのみで実装するよりも速い場合がある。

もう1つのANEを適用したデモとして、迷路ゲームが紹介された。迷路を表示するアルゴリズムはJavaで、フロントの部分はActionScriptを利用して作成されている。このように制作リソースを分けて作業したい場合にもANEを利用することができる。

丸山氏が指摘するように、ANEファイル自体を作るにはネイティブコードの知識が必要で、パッケージングする作業も手間がかかるため、まだハードルが高い。しかし、ANEファイルを利用することは上記の通り、簡単にできる。すでにいくつかのANEファイルが公開・配布されているので、まずはANEファイルを使うことから試してみてはいかがだろうか。

なお、ADCには丸山氏による「Flash Builder 4.6でネイティブ拡張(Native Extensions)を使ってみよう」があるので、こちらも参考にしていただきたい。

関連記事

ADC MEETUP ROUND03 レポート