第14回Flex2勉強会
Apolloプログラミング
今日のお題
Apolloって何?
- マルチプラットフォームのランタイム環境
- HTMLエンジン搭載
- Flash,HTML,JavaScript,PDFをまとめる
- Apolloアプリはローカルにインストールされる
- WEBブラウザの制限を越える
HTMLエンジン
- Webkit
- WindowsでもMacでも
- 同じHTML、JavaScriptを掛ける
- ブラウザごとに書かなくて良い
- JavaScriptも動く
- Ajaxアプリもそのまま動く
- GoogleMaps
JavaScript
- Flash→JavaScript
- イベント投げる。
- イベント受け取る。
- Flash←JavaScript
- イベント投げる。
- イベント受け取る。
HTMLをApollo化する
- 3分クッキング
- Hello.htmlを作成
<html> HELLO!! </html>
- Apollo用設定ファイルの作成
<?xml version="1.0" encoding="utf-8" standalone="no"?> <application xmlns="http://ns.adobe.com/apollo/application/1.0.M3" appId="hello1" version=".4"> <properties> <name>hello</name> <description/> <publisher>FlexCoder</publisher> <copyright/> </properties> <rootContent systemChrome="standard" transparent="false" visible="true">Hello.html</rootContent> <icon/> </application>
- さぁApolloアプリ実行しよう!
adl.exe Hello-app.xml
- アプリケーションを配布しよう
adt.exe Hello.air Hello-app.xml Hello.html
FlexをApollo化する
- プロジェクトの新規作成
- アプリの設定を記述
- 後でも設定可能
- ルートはApolloApplicationタグ
<?xml version="1.0" encoding="utf-8"?> <mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml“ layout="absolute"> <ここにプログラムを記述> </mx:ApolloApplication>
- 実行
- いきなり完成
- ちょっと見た目を変える
- 設定ファイル
- HelloApollo1-app.xml
- ステータスの表示
- Application.status
- 設定ファイル
<?xml version="1.0" encoding="utf-8"?> <mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" status="現在のステータス“title="Apolloアプリ"> <mx:Style> Application { background-image:""; background-color:""; background-alpha:"0.2"; } </mx:Style> <mx:Label text="Hello Apollo World." fontSize="20" /> </mx:ApolloApplication>
- 配布形式にする
- エクスポートでAIR指定
- ソースも付けられる
Apolloコンポーネントを使う
- ローカルファイル
- HTML
- ウィンドウ
- ローカルファイル
- HTML
- HTML表示
- Spriteのサブクラス
- フィルタ
- 透明化
- 変形
- HTML表示
- ウィンドウ
- ウィンドウ操作
- 最大化、最小化、リストア、クローズ
- ウィンドウの新規作成
- イベント
- ACTIVATE / DEACTIVATE
- CLOSING / CLOSE
- FOCUS_IN / FOCUS_OUT
- MOVING / MOVE
- RESIZING / RESIZE
- ウィンドウ操作
- Alpha版の制限
- OSX版のツールバー
- システムトレイアプリ
- アイコンの操作
- デスクトップ情報
- ネイティブウィンドウメニュー
- アプリへのドラッグアンドドロップ
Apollo File API
- 機能概要
- 基本クラス
- パス指定
- Fileクラスはパスを表します
- プロパティ
- nativePath:OS独自のパス
- url:URL
- parent:上位パス
- 操作
- resolve(‘a/b.txt’) :現在パスから指定
- resolve(‘..’) :上のフォルダを指定
- relativize(otherFile) :現在のパスに追加
- canonicalize :正規化、標準化(Document and Setting など)
- カタログ情報
- ユーザーフォルダ
- File.userDirectory
- File.desktopDirectory
- File.documentsDirectory
- アプリケーションフォルダ:
- File.appResourceDirectory
- File.appStorageDirectory
- File.createTempDirectory()
- ファイル情報
- size
- creationDate, modificationDate
- ディレクトリーリスト
- listDirectory()
- ユーザーフォルダ
- ファイルシステム情報
- ファイル操作
- ファイルIOFileStreamクラス
- IDataInput/IDataOutputインタフェースを実装(ByteArrayやSocketと同じように)
- バイナリデータ
- read/writeBytes
- read/writeInt, read/writeDouble, など
- AMF データ (直列化されたオブジェクト)
- read/writeObject
- テキストデータ
- read/writeMultibyte
- read/writeUTFBytes
- 同期/非同期モデル
- 非同期File I/O
- 同期ファイルI/OはByteArrayのように振舞う
- “bytesAvailable”プロパティはファイルの最後まで読めることを表している。
- 非同期ファイルI/OはSocketやURLStreamのように振舞う。
- “bytesAvailable”はデータがバッファリングされて読み込み可能なことを表している。
- “progress”イベントは新しいデータが読めることを表している。
- “complete”イベントが起こればカンタンにファイルを読める。
- 他の方法
- readInt(), readDouble(), など、読み込み可能なファイルから読む。
- 同期ファイルI/OはByteArrayのように振舞う
JavaScript連携
- 概要
- ActionScriptとJavaScriptは共にECMAScriptベースの言語である。
- Apolloでは相互に呼び出すことが可能。
- Apollo内のJavaScriptはバージョン1.7
- DOM
- ActionScriptからHTMLをDOM操作する
- HTMLのJavaScriptイベントにActionScriptを関連付ける
<html> <body id="link"> <p id="msg">Test</p> </body> </html>
- DOM操作
html.window.document.getElementById(“msg”).innerHTML = "メッセージ";
-
- JavaScriptイベントをリスニング
var link:Object = html.window.document.getElementById("link"); link.onclick = clickHandler;
- ActionScript→JavaScript
- JavaScriptの標準メソッド呼び出し
html.window.alert("Hello from ActionScript");
-
- JavaScriptのカスタムメソッド/プロパティ呼び出し
<script> greeting = "hello"; function reverseStr(str) { returnStr = ""; for (i = 0; i < str.length; i++) { returnStr = str.charAt(i) + returnStr; } return returnStr; } </script>
- JavaScript→ActionScript
- ActionScriptの標準メソッド呼び出し
<html> <script> runtime.trace("Hello from JavaScript."); </script> </html>
その他の機能
- ネットワークの検出
- ネットワークの状態変化を検出できる
Shell.shell.addEventListener(Event.NETWORK_CHANGE,onNetworkChange); function onNetworkChange(event:Event) { //検出時の処理 }
HelloApollo9.exe aaa bbb ccc
- アプリケーションの更新
- 現在インストールされているアプリを、プログラム経由で更新することができる。
- ローカルにインストールされているバージョンと、サーバーにある最新バージョンを比較すれば、最新版を自動的にインストールできる。
こんなかんじです。
資料はコチラからダウンロードできます。
http://fxug.net/archives/study_mtg_14/apollo_programming.pdf