遅ればせながら AIR ベータ 3 のもうちょっと詳しい情報です。
実行環境のインストール
まず、今回サポートされる OS は、
- Windows Vista Home と Ultimate Edition, Windows XP SP2
- Windows 2000 SP4 (シームレスインストールは未サポート)
- Mac OS 10.5 Leopard と Mac OS 10.4.x Tiger (Intel と PowerPC)
です。
AIR ベータ 1 の実行環境は 12 月 15 日で使用できなくなっています。ベータ 1 用のアプリケーションについてはこの機会にベータ 3 への移行をご検討ください。ベータ 3 は正式リリース前の最後のベータになる予定(いまのところ)ですので、今後大幅な変更は無いものと思われます。なお、AIR ベータ 2 は 2008 年 6 月 1 日に AIR ベータ 3 は 2008 年 11 月 1 日にそれぞれ使用できなくなる予定です。それまでベータ 2 とベータ 3 の実行環境を一緒に使用することは可能ですが、その場合は必ずベータ 2 の実行環境を先にインストールするようにしてください。
AIR ベータ 1 のアンインストールは Windows であれば「プログラムの追加と削除」から、Mac ではアプリケーションディレクトリ内の「Adobe AIR Uninstaller」より行うことができます。ちなみにベータ 3 のアンインストールも同様の手順で行えますが、ベータ 3 をアンインストールすると以前のバージョンも全て削除されますのでご注意ください。
さて、以下、今回のリリースでの変更点です。
シームレスインストール
ベータ 3 の環境をインストール後はベータ 2 のシームレスインストールが正常に動作しなくなります。ベータ 2 のインストールバッジを引き続き利用する場合は、ベータ 3 の SDK に含まれる AIRBadge.as を使うようにインストールバッジを修正してください。修正には Flash CS3 が必要になります。なお、ベータ 3 のシームレスインストールの使用は最新の Flash Player (9.0.115.0) が前提です。
アプリケーション記述ファイルの変更
以下の点が変更されています。
- xmlns が "http://ns.adobe.com/air/application/1.0.M6" に
- <title> が <name> に
- <name> が <filename> に
- <handleUpdates> が <customUpdateUI> に
- appId が <application> タグの属性から <id> に
- version が <application>タグの属性から<version> に
- <allowBrowserInvocation> タグを <application> の子要素として追加
- <icon> タグを <fileType> の子要素として追加
DB 関連の変更
BLOB の書き出しをする際にデータが自動的に ByteArray にシリアライズされます。以前のバージョンで明示的に ByteArray を使用していた場合には対応が必要です。
それから ISQLUserDefinedFunction と SQLUserDefinedFunctionType はサポートされなくなりますので利用を中止するようにしてください。
既知の制限・問題
沢山ありますので主な件だけ。
HTML:
- PDF の表示には Reader 8.1 以降が必要です
- イメージファイルへの直接リンクをクリックするとイメージの代わりにイメージのダウンロードサイズが表示されます
- Vista では <mx:text> 内のリンクをクリックするとデフォルトブラウザの設定に関わらず IE のウインドウが開きます
- iframe の width や height を 100% にするとアプリがハングすることがありますのでそれより小さい値を使用します
- アプリケーション HTML 以外のテキストインプットでは Control+v が使用できません
HTML 内の Flash コンテンツ:
- navigateToURL が指定された HTML ページを表示しないことがあります
- Windows 上で frameset/iframe 内の SWF が表示されないことがあります
- WMODE が transparent または opaque の場合コンテンツが正しく表示されないことがあります
- 右クリックで
証明書を使った電子署名:
AIR アプリケーションをパッケージする際、使用する証明書によってNullPointerException が発生することがあります。その場合には以下の手順でパッケージを行います。
- ADT (コマンドラインツール) を次の URL からダウンロードします: http://www.adobe.com/go/getadt
- AIR SDK のインストールされたディレクトリ内の \lib の下にファイルをコピーします
- 以下のコマンドを実行します (下は myApp.swf をパッケージする例です)
adt -package -storetype pkcs12 -keystore myCertificate -storepass myPassword application.xml myApp.swf <myOtherFiles>
ドメイン間の LocalConnection:
LocalConnection.allowDomain() を使用する際 app#<appid> 形式のドメインに正しく動作しません。そのために allowDomain("*") を使用する必要のあるケースがでてくるかと思います。 allowDomain("*") を指定すると全てのドメインからのアクセスが可能になるため、あくまで一時的な回避策として利用するようご注意ください。.
その他一般的な API
- NativeApplication.undo() と NativeApplication.redo() はまだ利用できません
- NativeMenu.clone() を実行するとクラッシュすることがあります
- MouseEvent.buttonDown は常に true です
- ウインドウが未表示の状態でフルスクリーン等ディスプレイの状態を変更すると表示がおかしくなったりクラッシュすることもあります
- stage の scaleMode を NO_SCALE に設定しないとオブジェクトの大きさが勝手に変更されます
- 入力フィールドにフォーカスがあると F1-F12 キーを押してもイベントが発生しません
Mac 関連:
- NativeApplication.removeAsDefaultApplication() を実行すると正しく動作せずに ActionScript error #2004 になります
- 変更された PDF を再読み込みするとアプリケーションがハングすることがあります
Mac OS 10.5 (Leopard) 関連:
- FileReference を使ってアップロードする際、URLRequest にカスタムヘッダを指定しても有効にならないことがあります
- 背景の透明なアプリケーションが正しく描画されないことがあります
- rollOut と mouseLeave が正しく動作しません
追加削除されたメソッド・属性
最後に、英文のままですが追加・削除されたメソッドや属性のリストです。主なところでは Shell が NativeApplication になったり JavaScritObject が Object になったり DRM 関連のメソッドが追加されたりしています。SQL DB 関連も多くの変更があります。
New Methods/Properties/Constants
File
- File.isPackage : Boolean
- File.isSymbolicLink : Boolean
HTML
- HTMLLoader.textEncodingOverride : String
- HTMLLoader.textEncodingFallback : String
- HTML <frame> attribute allowcrossdomainxhr
Mouse
- MouseEvent.controlKey : Boolean
- MouseEvent.clickCount : int
- MouseEvent.MIDDLE_CLICK
- MouseEvent.MIDDLE_MOUSE_DOWN
- MouseEvent.MIDDLE_MOUSE_UP
Drag and Drop
- NATIVE_DRAG_UPDATE : String
Media
- flash.media.scanHardware()
DRM
- NetStream.resetDRMVouchers()
- NetStream.setDRMAuthentication()
Security
- flash.securiy.XMLSignatureValidator.useSystemTrustStore : Boolean
- flash.securiy.XMLSignatureValidator.revocationCheckSetting : String
NativeApplication (formerly Shell)
- NativeApplication.copy()
- NativeApplication.cut()
- NativeApplication.redo()
- NativeApplication.undo()
- NativeApplication.selectAll()
- NativeApplication.performKeyEquivalent()
- NativeApplication.publisherID. publisherID is an empty string when debugging with adl. However, a command line flag in adl allows you to run with a publisherID, and the Flex 3 debugging UI also has a field for you to enter it. Clients can find their publisherID by installing the app and looking at the META-INF/AIR/publisherid file.
Local SQL DB
- SQLConnection.openAsync()
- SQLError.details
- SQLConnection.cacheSize
- SQLConnection.autoCompact
- SQLConnection.pageSize
- SQLConnection.cacheSize
- SQLMode
DRM
- DRMErrorEvent (error code related properties from DRMStatusEvent has been migrated to DRMErrorEvent)
Removed Methods/Properties/Constants
URLRequest
- URLRequest.setLoginCredentials() - use URLRequestDefaults.setLoginCredentialsForHost() instead
Local SQL DB
- SQLStatement.prepare()
- SQLStatement.reset()
- SQLStatement.prepared : Boolean
- SQLEvent.PREPARE
- SQLConnection.getFile()
- SQLConnection.synchronous
- SQLConnection.version
- SQLConnection.caseSensitiveLike
- SQLError.code
HTML
- window.runtime property for non application HTML pages.
- flash.html.JavaScriptObject, use Object class instead
- flash.html.JavaScriptArray, use Object class instead
- flash.html.JavaScriptFunction, use Object class instead
NativeWindow
- NativeWindowSystemChrome.UTILITY
- NativeWindowType.MODAL
- NativeWindowInitOptions.hasMenu
API changes
URI Schemes
- "app-resource:" scheme -> "app:" scheme
File
- FileReference.send() -> FileReference.uploadUnencoded()
- File.applicationResourceDirectory -> File.applicationDirectory
- flash.filesystem.EncryptedLocalStore -> flash.data.EncryptedLocalStore
Drag and Drop
- DragManager -> NativeDragManager
- DragOptions -> NativeDragOptions
- DragAction -> NativeDragActions
- NativeDragEvent.actionsAllowed : DragOptions -> NativeDragEvent.allowedActions : NativeDragOptions
Mouse
- MouseEvent.cmdKey : Boolean -> MouseEvent.commandKey : Boolean
Service Monitor
- ServiceMonitor.lastUpdated -> ServiceMonitor.lastStatusUpdate
- ServiceMonitor.augmentPrototype() -> ServiceMonitor.makeJavascriptSubclass()
Screen
- Screen.colorDepth : uint -> Screen.colorDepth : int
NativeApplication (formerly Shell)
- flash.system.Shell -> flash.desktop.NativeApplication
- Shell.isBoundAsDefaultApplication() -> NativeApplication.isSetAsDefaultApplication()
- Shell.bindAsDefaultApplication() -> NativeApplication.setAsDefaultApplication()
- Shell.unbindAsDefaultApplication() -> NativeApplication.removeAsDefaultApplication()
- Shell.id -> NativeApplication.applicationID
- Shell.lastUserInput -> NativeApplication.timeSinceLastUserInput
- Shell.shell -> NativeApplication.nativeApplication
- Shell.startApplicationAtLogin -> NativeApplication.startAtLogin
- Shell.activateApplication -> NativeApplication.activate
Local SQL DB
- SQLEvent.CLEAN -> SQLEvent.COMPACT
- SQLConnection.clean() -> SQLConnection.compact()
- SQLUpdateEvent.tableName : String -> SQLUpdateEvent.table : String
- SQLConnection.attach(): boolean argument removed
- SQLConnection.SQLConnection(): boolean argument to constructor removed
- The SQLStatement parameters property is now 0-based instead of 1-based. (i.e.: sql.paremeters[1] -> sql.parameters[0]).
URLRequest
- URLRequestDefaults.shouldAuthenticate -> URLRequestDefaults.authenticate
- URLRequest.shouldAuthenticate -> URLRequest.authenticate
- URLRequestDefaults.shouldCacheResponse -> URLRequestDefaults.cacheResponse
- URLRequest.shouldcacheResponse -> URLRequest.cacheResponse
URLMonitor
- URLMonitor.acceptableStatuses -> URLMonitor.acceptableStatusCodes
Updater
- flash.system.Updater -> flash.desktop.Updater
HTML
- HTMLHost.closeWindow() -> HTMLHost.windowClose()
- HTMLHost.htmlControl -> HTMLHost.htmlLoader
- HTMLControl -> HTMLLoader
- HTMLControl.useApplicationDomain -> HTMLLoader.runtimeApplicationDomain
- HTMLControl.shouldCacheResponse -> HTMLLoader.cacheResponse
- HTMLControl.htmlWidth -> HTMLLoader.contentWidth
- HTMLControl.htmlHeight -> HTMLLoader.contentHeight
- HTMLControl.domInitialize Event -> HTMLLoader.htmlDOMInitialize : Event
- Event.DOM_INITIALIZE -> Event.HTML_DOM_INITIALIZE
- flash.events.HTMLUncaughtJavaScriptExceptionEvent -> flash.events.HTMLUncaughtScriptExceptionEvent
- Javascript API: window.htmlControl ? window.htmlLoader
EncryptedLocalStore
- EncryptedLocalStore.setItem(name:String, data:ByteArray) -> EncryptedLocalStore.setItem(name:String, data:ByteArray , stronglyBound : Boolean = false)
1点お聞きしたいことがございます。
nativeWindowで生成したウインドウに、FlexのコンポーネントをaddChildしたいのですが、これは、AIRの1.0では出来るのでしょうか。
宜しくお願いいたします。
ありがとうございます。
こちらのブログサイトのおかげで、
bata3のHTML、DROP周りの移行ができました。
が質問があります。
HTMLLoaderを使って読込んだFlashの表示が、Adobe社のFlash以外は表示されません。
代替え用バナーが表示されるのであれば納得できるのですが、何も表示されません(例:Yahoo!など)。
→document.writeから呼出されるswfが問題と言う訳でもないので困っております(AIRのランタイムの問題であれば、待つだけなのですが…)。
制作環境:WinXP SP2, AIR bata3, FlashCS3 AIR bata3
※AIRは、bata2から使用
よろしくお願いいたします。
toraji さん、こんにちは。
Flex のコンポーネントを追加する場合、追加先も Flex のコンポーネントを使用します。
nativeWindow ではなく Window コンポーネント等 (mx でパッケージが始まるクラス) であれば追加が可能です。
masa さん、こんにちは。
とりあえず報告されているバグには無いようです。
Adobe の Flash は表示されるとのことですので、セキュリティ関連の制限とかかもしれません。
Classic サンドボックス内でも同様でしょうか?
未知のバグの場合は、英語になってしまいますが Labs のフォーラムをご利用ください。
お返事ありがとうございます。
mx.core.Window クラスで解決いたしました。
これから、HTMLコンポーネントなどaddChildして、PDFの表示など確認していきます。
ありがとうございました。
いつも勉強なって助かっています。
ひとつ質問なのですが、
一番最初に生成されるウィンドウのtypeをLIGHTWEIGHTにしたいのですが、方法がわかりません。
初期設定ではNORMALになっているようですが、アプリケーション記述ファイルにもtypeの指定はないようです。
変更することはできないのでしょうか。
ton さん、こんにちは。
最初に生成されるウインドウを LIGHTWEIGHT にすることはできません。
そのため、最初に生成するウインドウから新規に LIGHTWEIGHT のウインドウを
生成し、その後に最初のウインドウを閉じるといった手順が必要です。
最初に生成するウインドウの visible を false にしたままにしておけば、
ユーザからこの動きは見えないと思います。
素早い返答ありがとうございます。
初期ウィンドウはLIGHTWEIGHTにできないのですね。
しかしこの方法だとまた問題が出てしまいました。
初期ウィンドウを閉じるとアプリケーションを終了したことになり、設定しておいたタスクトレイアイコンが消えてしまいます。
いろいろ試してみたのですがどうにも上手くいきませんでした。
初期ウィンドウを閉じてもタスクトレイアイコンを表示させたままにしておくにはどうすればいいのでしょうか。
度々の初心者質問申し訳ありません。
返事が遅くなりましてすみません。
> とりあえず報告されているバグには無いようです。
そうですか。
> Adobe の Flash は表示されるとのことですので、セキュリティ関連の制限とかかもしれません。
> 未知のバグの場合は、英語になってしまいますが Labs のフォーラムをご利用ください。
色々やってみた結果、多分これだと思うものがありました。
・ウィンドウスタイルを「Custom Chrome(transparent)」にするとFlashが表示されない(Adobe社のFlashは、OK…)
他のスタイルですとFlashを表示することができました。
> Classic サンドボックス内でも同様でしょうか?
すみません。
プログラムが得意では無い為
上記のやり方が分かりません。
開発環境:Flash CS3のみ
よろしくお願い申し上げます。