2019-04-20

[Flash] Adobe AIR SDK 22 Windows App

[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: connect

timestampを生成できないとか言ってきて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: passwd

HelloWorldフォルダーが作られて、中に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/hash

distribute 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 件のコメント:

コメントを投稿

人気記事