[Flash] Adobe AIR SDK 22でWindowsアプリを作成する
動作確認環境:
- Windows7 64bit
- Adobe AIR SDK 22
- Java7
Adobe AIR SDKというかFlashでWindowsアプリを作成する。 Flex SDK を使用した初めてのデスクトップ AIR アプリケーションの作成 を見ながら進めるぞ。
以前やった設定で、mxmlcは使用可能になっている。
なんだかmxmlcのメッセージが化けてる‥‥。
MINGW32だとShift_JISの日本語文字列が化けるんだろう。英語に変えたい。
$ mxmlc -help
Adobe ActionScript Compiler (mxmlc)
Version 2.0.0 build 354188
Copyright 2004-2012 Adobe Systems Incorporated. All rights reserved.
-help [keyword] [...]
▒R▒}▒▒▒h▒▒▒C▒▒▒V▒▒▒^▒b▒N▒X▒̏▒▒ѐݒ▒ϐ▒▒̐▒▒▒▒ɂ▒▒ẮA▒▒▒▒▒X▒g▒▒▒▒▒O▒܂▒▒͎▒▒̂▒▒▒▒ꂩ▒̓▒▒ʂȃL▒[▒▒▒[▒h▒▒▒w▒肵▒܂▒ :
syntax - ▒R▒}▒▒▒h▒▒▒C▒▒▒̈▒ʓI▒ȃV▒▒▒^▒b▒N▒X▒▒▒▒▒▒▒▒܂▒http://d.hatena.ne.jp/mzp/20060825/1156509941 を見ると -Duser.region=us -Duser.language=en をmxmlc(shスクリプト)に指定すればよいらしい
$ which mxmlc
/c/home/bin/FlashDevelop5/Apps/air22/bin/mxmlc
$ cd $(which mxmlc | sed 's@/[^/]*$@@')
$ cp -p mxmlc{,.orig}
$ vi mxmlc
$ diff mxmlc.orig mxmlc
49c49
< VMARGS="-Xmx512m -Dsun.io.useCanonCaches=false "
---
> VMARGS="-Xmx512m -Dsun.io.useCanonCaches=false -Duser.language=en "
$ mxmlc -help
Adobe ActionScript Compiler (mxmlc)
Version 2.0.0 build 354188
Copyright 2004-2012 Adobe Systems Incorporated. All rights reserved.
-help [keyword] [...]
For information on command line syntax and descriptions of
configuration variables, specify a search string, or one of the
following special keywords:
syntax - describe the general syntax of the command line
化けてない英語メッセージになった。
make XML
テキストファイルを作成。
HelloWorld-app.xml
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://ns.adobe.com/air/application/22.0">
<id>samples.flex.HelloWorld</id>
<versionNumber>0.1</versionNumber>
<filename>HelloWorld</filename>
<initialWindow>
<content>Main.swf</content>
<visible>true</visible>
<renderMode>direct</renderMode>
<width>480</width>
<height>480</height>
</initialWindow>
</application>make swf
次にコンテンツであるswfファイル。
[Flash] Starlingの学習 TouchEvent https://itouhiro.blogspot.jp/2017/05/flash-starling-touchevent.html のソースコードを使う。 ビルドは今回はFlashDevelop使わずにTerminal。
$ tree
.
|-- Game.as
|-- HelloWorld-app.xml
|-- Logger.as
|-- Main.as
|-- Main.swf
|-- MyRectangle.as
`-- lib
`-- starling.swc
$ mxmlc -library-path+=lib +configname=air Main.as
Loading configuration: C:\home\bin\FlashDevelop5\Apps\air22\frameworks\air-config.xml
85954 bytes written to Z:\_now\as3\201904air1\Main.swf in 1.626 seconds
$ adl HelloWorld-app.xml
アプリの動作確認も問題ないね。adlコマンドは AIR Debug Launcher の略なのか。
それではこれをWindows実行ファイルにしよう。
make signing file
自己署名入り証明書とキーのペアの生成。
$ adt.bat -certificate -cn SelfSigned -validityPeriod 25 2048-RSA sampleCert.pfx passwdこれで自己署名入り証明書 sampleCert.pfx を生成した。
make Windows EXE
Windows実行ファイル作成には、Windows でのキャプティブランタイムバンドルの作成を参考にする。
キャプティブランタイムバンドルって何だい?
CaptiveRuntime(captive:専属の、runtime:ソフトの実行に必要なサブプログラム。具体的にはFlashPlayer)を同梱(Bundle)するということだよ。
Adobe AIRはもともと
- AIR実行ランタイム (中身は FlashPlayer)
- AIRパッケージ (中身は swf)
を別々に配布していた。 使う側は、まずAIR実行ランタイムをWindowsにインストールしたあとで、個々のAIRパッケージをさらにインストールすればアプリを動かせた。
でも面倒だから「AIR実行ランタイム+AIRパッケージ」をまとめて配布する仕組みが作られたんだ。
作り方は
$ adt.bat -package -storetype pkcs12 -keystore sampleCert.pfx -target bundle HelloWorld HelloWorld-app.xml Main.swf
password: passwd
Could not generate timestamp: Connection timed out: connecttimestampを生成できないとか言ってきてexe作成できない。エラーメッセージでGoogle検索すると
リリースビルドの書き出しの時に「タイムスタンプ」へのチェックを外す
といいらしい。
https://help.adobe.com/ja_JP/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7f72.html
-tsa:電子署名にタイムスタンプを付与する RFC3161 準拠のタイムスタンプサーバーの URL を指定します。URL を指定しない場合、GeoTrust が提供するデフォルトのタイムスタンプサーバーが使用されます。AIR アプリケーションの署名にタイムスタンプを付与すると、署名時にその証明書が有効であったことがタイムスタンプによって保証されるので、署名証明書の有効期限が切れた後でもアプリケーションをインストールできます。
ADT がタイムスタンプサーバーに接続できない場合、署名はキャンセルされ、パッケージは生成されません。タイムスタンプの付与を無効にするには、-tsa none を指定します。ただし、タイムスタンプなしでパッケージ化された AIR アプリケーションは、署名証明書の有効期限が切れるとインストールできなくなります。
これだな。 -tsa none を付与すればいいようだ。「有効期限が切れるとインストールできなくなります」とあるがCaptiveRuntimeBundleならAIRパッケージのインストール工程は不要だから問題ないだろう。
$ adt.bat -package -storetype pkcs12 -keystore sampleCert.pfx -tsa none -target bundle HelloWorld HelloWorld-app.xml Main.swf
password: passwdHelloWorldフォルダーが作られて、中にHelloWorld.exeが生成されている。インストールなしで実行可能だ。
swfも見えちゃってるね。
HelloWorldフォルダー配下の総ファイル容量は25.8MBだった。
$ \ls -shRF | awk 'NF{if(/:/){dir=substr($0,0,index($0,":")-1)}else if($1!="total" && $0!~/\//){fname=$0;sub(/^ *[^ ]+ /,"",fname);printf("%6s %s/%s\n",$1,dir,fname)}}'
64K ./HelloWorld.exe*
84K ./Main.swf
1.0K ./mimetype
21M ./Adobe AIR/Versions/1.0/Adobe AIR.dll*
444K ./Adobe AIR/Versions/1.0/Resources/Adobe AIR.vch
0 ./Adobe AIR/Versions/1.0/Resources/adobecp.vch
64K ./Adobe AIR/Versions/1.0/Resources/CaptiveAppEntry.exe*
44K ./Adobe AIR/Versions/1.0/Resources/NPSWF32.dll*
4.7M ./Adobe AIR/Versions/1.0/Resources/WebKit.dll*
28K ./Adobe AIR/Versions/1.0/Resources/WebKit/LGPL License.txt
4.0K ./Adobe AIR/Versions/1.0/Resources/WebKit/Notice WebKit.txt
4.0K ./META-INF/signatures.xml
1.0K ./META-INF/AIR/application.xml
1.0K ./META-INF/AIR/hashdistribute license
この実行ファイルを配布する場合、AIRのCaptive Runtime機能を使用したアプリケーションの配布についてにあるようにAdobeと配布許諾契約(再配布ライセンス)結んでおくべき?
Is it possible to sell an application that require Adobe Air runtime license?によると契約は不要だそうだが情報源はどこだ?
You can distribute your app without any special license, or the app with captive runtime.
公式文書 Adobe AIR のインストールによると
・アプリケーションとランタイムの両方をインストールするカスタムインストーラーを作成します。この方法で AIR ランタイムを配布する場合は、アドビの承認が必要です。「Adobe runtime licensing」ページで承認を要求できます。
・AIR をキャプティブランタイムとしてバンドルする AIR アプリケーションをインストールします。キャプティブランタイムは、バンドルを行うアプリケーションでのみ使用され、他の AIR アプリケーションを実行するために使用されることはありません。ランタイムのバンドルは、Mac および Windows ではオプションです。iOS では、すべてのアプリケーションにバンドルされたランタイムが含まれています。AIR 3.7 より、すべての Android アプリケーションはデフォルトでバンドルされたランタイムを含みます(ただし、別のランタイムを使用するオプションもあります)。
Adobeと契約する必要があるのは「アプリケーションとランタイムの両方をインストールするカスタムインストーラーを作成」のときだけだな。キャプティブランタイム形式では必要と書いてないから、必要ないんだろう。
installer
配布するとき、HelloWorldフォルダーをzipにするのでもいいが、Windows Installer形式にする方法もある。 https://forum.starling-framework.org/d/19129-how-to-create-a-standalone-exe ではNSIS installer設定を説明。





0 件のコメント:
コメントを投稿