The post AIR3 Native Extension – (1) ANEとは? appeared first on QOOGIVER blog.
]]>Adobe AIR3 Native Extensionについての概要と動作確認を行います。また動作確認サンプル制作において参考になった記事をいくつかご紹介します。サンプルについては次回記事以降で説明していきたいと思います。
先月、adobe AIR 3.0がリリースされました。今回の記事では、Adobe AIR 3.0の新機能である「Native Exension for Adobe AIR (通称:ANE)」についてメモしようと思います。
ANEではActionScriptからネイティブコードを実行できます。ネイティブコードとはWindows(C++,C#など)、MacOSXやiphone,iPadなどでお馴染のiOS(Objective-c)、Android(JAVA)などのコードです。ANEでは大まかに、次のような事が実現できるようです。
OS独自の機能というのは、スマートフォンであれば加速度センサーや電話帳などの機能です。TVであれば番組情報などの処理関連です。また、ネイティブなコード(WindowsのC++やMacOSのObjective-c)を呼び出して実行させるため、速度改善が見込めるようです。
Adobe AIRはOSに依存しないアプリケーションを配布できる点がメリットです。しかし、一方でOS独自の機能を活用したい場合にはAPIが用意されておらず、実装は難しいです。更にAdobe AIRは、ランタイムで実行されるためパフォーマンスではネイティブなコードには敵いません。
今回、Native Extensionが追加された事により、AIRの不利な点を大きくカバーしたことになります。
ただし、制作するAIRがマルチプラットフォームでの配布を目標とするケースでは、配慮が必要です。具体的には制作者が各プラットフォームで動作するネイティブコードを用意しなければなりません。Native Extensionでは、OS依存の処理が実行できる反面で、従来AIRの優位性であったポータビリティを下げてしまうケースもあるわけです。
以降複数記事で、ANEの動作確認サンプルを作成していきたいと思います。動作内容は以下のとおりです。
制作環境は以下で行っています。
制作の流れは以下の通りです。
以下の記事を参考にさせていただき、大変参考になりました。ありがとうございます。
ADOBE® AIR® 用ネイティブ拡張の開発(和訳) .pdf
Adobeによる、ANEについての詳細なドキュメントです。
Adobe AIR と ActionScript Native Extensions (ANE) (akihiro kamijoさん)
ANEの利点、役割と、ANEとNative Processの相違点を分かりやすく紹介されています。大変参考になりました。
Build FlashPlayer 11 AS with FlashDevelop (NUTSUさん)
Flash Developでの開発環境の準備方法が大変参考になりました。Flash DevelopでFlex SDK 4.5.1とAdobe AIR SDK 3.0を利用する方法が中盤で紹介されています。
AIR 3 Native Extension の開発についての連載 (AKABANAさん)
Flash Builder(Flex)とVisual C++によりANEを実装したAIRの作り方を解説されています。また後半の連載ではMacOS,iOS(Objective-c)やAndroid(JAVA)、C#での拡張方法も網羅されています。
ActionScript Native Extensionsのサンプルアプリ作成のまとめ (agendyさん)
上記の記事と同様にFlash Builder(Flex)とVisual C++によりANEを実装したAIRサンプルの制作が解説されています。写真を含めた解説が分かりやすかったです。
The post AIR3 Native Extension – (1) ANEとは? appeared first on QOOGIVER blog.
]]>The post Adobe AIR 2.x系 .exeのアプリケーションアップデートを行う方法について appeared first on QOOGIVER blog.
]]>Adobe AIR 2.xで.exe形式のアプリケーションを書き出した場合に、air.update.ApplicationUpdaterUIクラスが上手く動作しませんでした。原因はair.update.ApplicationUpdaterUIがダウンロードした更新ファイルである.airは認識するが、.exeはエラーと認識してしまうためです。従って、.exeで書き出した場合にはair.update.ApplicationUpdaterクラスから更新ファイルをダウンロードさせる必要があるようです。
※air.update.ApplicationUpdaterUIクラスからのアプリケーションアップデートが出来る!という情報がございましたら、コメントへご指摘いただけると幸いです。
仕事でAdobe AIR 2.7のアプリ開発を行っています。Adobe AIRとはmac OS,Windows,Linuxで動作するアプリ実行ランタイムのことです。ユーザーの実行環境に左右されにくいアプリを容易に提供できるという点がAdobe Flashと似てますよね。現在Adobe AIRの最新バージョンは2.7です。
Adobe AIR 1.xから2.xへのバージョンアップで面白い変化があったのは、コマンドラインベースのアプリとの連携が行えるようになったところです。世にはコマンドラインベースのアプリケーションが無数に存在しています。利用権限が問題なければ、コマンドラインベースのアプリケーションに専門知識が必要な一連の処理を任せる事ができるわけです。例えばAIRから読み込んだ音声ファイル(例:wav,aif)、または録音した音声(バイナリ)をmp3に書き出しする処理を必要とする場合には、mp3に関する専門知識が必要になります。ところがAIR 2.xではmp3エンコーダーで有名なlame(レイム)に書き出し処理を依頼する事も可能となります。
コマンドラインベースのアプリケーションとの連携にはNativeProcessクラスを使用します。注意すべき点はNativeProcessクラスを利用する場合にはデスクトップネイティブインストーラーのパッケージ化を行う必要があります。つまり通常の書き出しとは異なり、ADTコマンドからの書き出しになります。簡単に説明すると、前述したlame.exeのような外部のコマンドラインベースのアプリケーションを利用するわけですから、lame.exeもAIRのアプリケーションディレクトリに内包しておく必要があり、ここでADTによりパッケージ化の作業が必要なわけです。このとき、書き出したファイルは.airではなく.exeとなります。
ここからが、本題です。通常アプリケーションのアップデート実装にはair.update.ApplicationUpdaterUIクラスが便利です。air.update.ApplicationUpdaterUIクラスでは、アップデートのチェックから、ダウンロード、更新インストールまで、更新インターフェースが用意されており、ある程度楽に一連の処理が実装できてしまいます。しかし残念ながら、.exeに書き出したAIRファイルはダウンロードの時点でエラーとなり、後続処理は中止されてしまいます(DownloadErrorEvent)。これは.airしか更新ファイルと認識しないことが原因のようです。この場合、以下のようなエラーメッセージが表示されます。
エラーメッセージ:There was an error downloading the update. Error# 16800
これを回避するにはair.update.ApplicationUpdaterクラスを利用することで回避できそうです。air.update.ApplicationUpdaterクラスは更新インターフェイスの自作を行いたい場合に利用するクラスです。実装の流れとしては、更新バージョンチェックまではair.update.ApplicationUpdaterUIクラスと同様の処理を行い、あとは自作でダウンロード処理を実装することになります。以下のサンプルコードでは、更新が必要な場合にブラウザから更新アプリケーションファイルをダウンロードさせます。
下記コードはActionScript3.0,Adobe Flash CS4,Adobe AIR SDK 2.7の環境で動作します。Flash Builder,Flexを使用されている場合には適宜コードを変更してください。
//アップデートクラスのインポート //事前にapplicationupdater_ui.swcへのライブラリパスを通しておいてください。 import air.update.events.*; import air.update.ApplicationUpdater; //起動中のアプリのバージョン private var _AppVer:String = ""; //アップデータークラス private var _updater:ApplicationUpdater = new ApplicationUpdater(); private function init(e:UpdateEvent):void{ //アップデート処理 //アプリケーションのアップデート情報を記載したXML _updater.configurationFile = new File("app:/config/updaterConfig.xml"); //初期化した後の処理 _updater.addEventListener(UpdateEvent.INITIALIZED , omUpdaterInit); //リモートサーバーにある更新アプリケーションの情報であるXMLをダウンロードした後の処理 _updater.addEventListener(StatusUpdateEvent.UPDATE_STATUS, onUpdateStatus); //初期化 _updater.initialize(); } private function onUpdaterInit(e:UpdateEvent):void{ _AppVer = e.target.currentVersion; //アプリの現行バージョンを保持 _updater.checkNow(); //アップデートの確認を行う } private function onUpdateStatus(event:StatusUpdateEvent):void{ //アプリケーションの更新が必要である場合 if( event.available){ //アップデートメッセージ trace("アプリは最新版にアップデートを行う必要があります。アプリが開く「SoundPlayer.exe」を「実行」してください。\n\n[更新内容]:\n バージョン:"+String(event.version)+" (現在のバージョン:"+_AppVer+")\n 更新箇所:"+event.details.toString()); //ブラウザからアップデートファイルをダウンロードする var urlReq:URLRequest = new URLRequest("http://gamagori-usen.jp/air-soundPlayer-update/SoundPlayer.exe"); navigateToURL(urlReq); } }
The post Adobe AIR 2.x系 .exeのアプリケーションアップデートを行う方法について appeared first on QOOGIVER blog.
]]>