ADT(AIR 開発ツール)を使用した AIR インストールファイルのパッケージ化



AIR 開発ツール(ADT)を使用して、SWF ベースおよび HTML ベースの AIR アプリケーションの AIR インストールファイルを作成します(Adobe® AIR™ Extension for Dreamweaver® を使用してアプリケーションを作成している場合は、AIR - アプリケーションとインストーラの設定ダイアログの「AIR ファイルを作成」コマンドを使用して AIR パッケージを作成することもできます。『Dreamweaver 用 AIR 拡張機能の使用』を参照してください)。

ADT は、コマンドラインまたは Ant などのビルドツールから実行できる Java プログラムです。SDK には、Java プログラムを実行するコマンドラインスクリプトが含まれています。ADT ツールを実行するようにシステムを構成する方法については、HTML 開発ツールの設定を参照してください。

AIR インストールファイルのパッケージ化

すべての AIR アプリケーションには、最低限、アプリケーション記述ファイルとメイン SWF ファイルまたはメイン HTML ファイルが必要です。その他のインストールされるアプリケーションアセットも、AIR ファイルにパッケージ化する必要があります。

すべての AIR インストーラファイルには、電子証明書を使用して署名する必要があります。AIR インストーラは、署名を使用して、署名後にアプリケーションファイルが変更されていないかどうかを検証します。VeriSign や Thawte などの証明機関のコード署名証明書または自己署名入り証明書を使用できます。信頼できる証明機関から発行された証明書は、該当の ID が発行者のものであることをアプリケーションのユーザに保証します。自己署名入り証明書を使用して、署名者としての ID を検証することはできません。この短所によって、パッケージが変更されていないという保証も弱くなります。正当なインストールファイルがユーザに届く前に、偽造されたファイルに置き換えられる可能性があるからです。

ADT -package コマンドを使用すると、1 つの手順で AIR ファイルをパッケージ化して署名することができます。-prepare コマンドを使用して未署名の中間パッケージを作成し、別の手順で -sign コマンドを使用してこの中間パッケージに署名することもできます。

インストールパッケージへの署名時、ADT はタイムスタンプ局サーバに自動的にアクセスして時刻を確認します。タイムスタンプ情報は、AIR ファイルに含められます。検証されたタイムスタンプを含む AIR ファイルは、後でいつでもインストールできます。ADT がタイムスタンプサーバに接続できない場合、パッケージ化はキャンセルされます。このタイムスタンプオプションはオーバーライドできますが、タイムスタンプがない場合、インストールファイルへの署名に使用された証明書の期限が切れると、AIR アプリケーションをインストールできなくなります。

既存の AIR アプリケーションをアップデートするパッケージを作成する場合、そのパッケージには、元のアプリケーションへの署名に使用したものと同じ証明書か、同じ ID の証明書で署名する必要があります。証明書の ID が同じになるようにするには、その 2 つの証明書が同じ識別名を持ち(すべての情報フィールドが一致)、ルート証明書までの証明書チェーンが同じである必要があります。したがって、識別情報を何も変更しない限りは、証明機関の証明書を更新できます。

AIR 1.1 では、-migrate コマンドによってアプリケーションを移行して新しい証明書を使用できます。証明書を移行するには、新しい証明書と古い証明書の両方で AIR ファイルに署名する必要があります。証明書の移行によって、自己署名入り証明書から商用コード署名証明書に変更したり、自己署名入り証明書や商用証明書から別の証明書に変更したりすることができます。証明書を移行する場合、既存のユーザが新しいバージョンをインストールする前に既存のアプリケーションをアンインストールする必要はありません。移行の署名にはデフォルトでタイムスタンプが付加されます。

注意: アプリケーション記述ファイルの設定によって、AIR アプリケーションの ID とデフォルトのインストールパスが決まります。アプリケーション記述ファイルの構造を参照してください。

1 つの手順での AIR ファイルのパッケージ化と署名

 -package コマンドを次のシンタックスで使用します(1 つのコマンドライン)。
adt -package SIGNING_OPTIONSair_fileapp_xml [file_or_dir | -C dirfile_or_dir | -e file dir ...] ...

SIGNING_OPTIONS この署名オプションは、AIR ファイルへの署名に使用される秘密キーと証明書を格納するキーストアを特定します。ADT によって生成された自己署名入り証明書を使用して AIR アプリケーションに署名するには、次のオプションを使用します。

-storetype pkcs12 -keystore certificate.p12

この例では、certificate.p12 はキーストアファイルの名前です(コマンドラインでパスワードが指定されていないので、パスワードの入力を求めるプロンプトが表示されます)。署名オプションについては、ADT コマンドラインの署名オプションで詳しく説明しています。

air_file 作成する AIR ファイルの名前です。

app_xml アプリケーション記述ファイルのパスです。このパスには、現在のディレクトリの相対パスか、絶対パスを指定できます(アプリケーション記述ファイルの名前は、AIR ファイルの「application.xml」に変更されます)。

file_or_dir AIR ファイルにパッケージ化するファイルとディレクトリです。空白文字で区切って、任意の数のファイルとディレクトリを指定できます。ディレクトリを指定すると、隠しファイルを除き、そのディレクトリ内のすべてのファイルとサブディレクトリがパッケージに追加されます(また、直接またはワイルドカードやディレクトリの展開によってアプリケーション記述ファイルが指定された場合は、無視され、パッケージにもう一度追加されることはありません)。指定するファイルとディレクトリは、現在のディレクトリまたはそのサブディレクトリのいずれかに含まれている必要があります。現在のディレクトリを変更するには、-C オプションを使用します。

重要: –C オプションに続く file_or_dir 引数では、ワイルドカードを使用できません(コマンドシェルでは引数を ADT に渡す前にワイルドカードを展開するので、ADT が誤った場所のファイルを検索することになります)。ただし、現在のディレクトリを表すドット文字(.)は使用できます。例えば、「-C assets .」と指定した場合は、サブディレクトリを含め、assets ディレクトリ内のすべてのコンテンツが、アプリケーションパッケージのルートレベルにコピーされます。

-C dir アプリケーションパッケージに追加する後続のファイルとディレクトリの処理前に、作業ディレクトリを dir の値に変更します。ファイルまたはディレクトリはアプリケーションパッケージのルートに追加されます。–C オプションは、ファイルシステムの複数の箇所からファイルを含めるために何度でも使用できます。dir に相対パスを指定した場合、そのパスは常に元の作業ディレクトリを基準に解決されます。

パッケージに含まれるファイルとディレクトリを ADT で処理するときに、現在のディレクトリとターゲットファイルの間の相対パスが格納されます。パッケージがインストールされるとき、これらのパスがアプリケーションのディレクトリ構造に展開されます。したがって、-C release/bin lib/feature.swf と指定すると、ファイル release/bin/lib/feature.swf は、ルートアプリケーションフォルダの lib サブディレクトリに配置されます。

-e file dir 指定したファイルを、指定したパッケージディレクトリに配置します。

注意: アプリケーション記述ファイルの <content> エレメントで、アプリケーションパッケージのディレクトリツリー内におけるメインアプリケーションファイルの最終的な場所を指定する必要があります。

ADT の例

現在のディレクトリ内の特定のアプリケーションファイルをパッケージ化します。

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.html AIRAliases.js image.gif

現在の作業ディレクトリ内にあるすべてのファイルとサブディレクトリをパッケージ化します。

adt –package -storetype pkcs12 -keystore ../cert.p12 myApp.air myApp.xml .
注意: キーストアファイルには、アプリケーションへの署名に使用する秘密キーが格納されます。署名証明書は、AIR パッケージ内に含めないでください。ADT コマンドでワイルドカードを使用した場合は、キーストアファイルは、パッケージ内に含まれないよう別の場所に配置されます。この例では、キーストアファイル cert.p12 は親ディレクトリに存在します。

メインファイルと images サブディレクトリのみパッケージ化します。

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.html AIRAliases.js images

HTML ベースのアプリケーションと HTML、scripts、images の各サブディレクトリ内のすべてのファイルをパッケージ化します。

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml index.html AIRALiases.js html scripts images

作業ディレクトリ(src)内にある application.xml ファイルとメイン HTML ファイルをパッケージ化します。

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air src/myApp.xml –C src myApp.html 

ビルドファイルシステムの複数の場所のアセットをパッケージ化します。この例では、パッケージ化する前は、次のフォルダにアプリケーションアセットが含まれています。

/devRoot 
    /myApp 
        /release 
            /bin 
                myApp.xml 
                myApp.html 
    /artwork 
        /myApp 
            /images 
                image-1.png 
                ... 
                image-n.png 
    /libraries 
        /release 
            /libs 
                lib-1.js 
                ... 
                lib-n.js 
                AIRAliases.js

/devRoot/myApp ディレクトリから次の ADT コマンドを実行します。

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air release/bin/myApp.xml  
    –C release/bin myApp.swf 
    –C release/bin myApp.html  
    –C ../artwork/myApp images  
    –C ../libraries/release libs

パッケージ構造は次のようになります。

/myAppRoot 
    /META-INF 
        /AIR 
            application.xml 
            hash 
    myApp.swf 
    mimetype 
    /images 
        image-1.png 
        ... 
        image-n.png 
    /libs 
        lib-1.swf 
        ... 
        lib-n.swf 
        AIRAliases.js
/myAppRoot 
    /META-INF 
        /AIR 
            application.xml 
            hash 
    myApp.html 
    mimetype 
    /images 
        image-1.png 
        ... 
        image-n.png 
    /libs 
        lib-1.js 
        ... 
        lib-n.js 
        AIRAliases.js

ADT を Java プログラムとして実行します(クラスパスの設定なし)。

java –jar {AIRSDK}/lib/ADT.jar –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf 
java –jar {AIRSDK}/lib/ADT.jar –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.html AIRAliases.js

ADT を Java プログラムとして実行します(Java クラスパスを設定して、ADT.jar パッケージを含めます)。

java com.adobe.air.ADT –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf 
java com.adobe.air.ADT –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.html AIRAliases.js

ADT コマンドラインの署名オプション

ADT では、Java Cryptography Architecture(JCA)を利用して、AIR アプリケーションへの署名に使用する秘密キーと証明書にアクセスします。署名オプションによって、キーストアおよびそのキーストア内の秘密キーと証明書を特定します。

キーストアには、秘密キーおよび関連付けられた証明書チェーンが含まれている必要があります。証明書チェーンは、アプリケーションの発行者 ID の確認に使用されます。署名証明書がコンピュータ上の信頼できる証明書にチェーン化されると、証明書の共通名が発行者名として AIR インストールダイアログに表示されます。

ADT では、証明書が x509v3 標準(RFC3280http://tools.ietf.org/html/rfc3280)に準拠し、コード署名の適切な値を持つ鍵用途拡張が証明書に含まれている必要があります。この証明書内の制約が優先され、AIR アプリケーションへの署名に一部の証明書が使用できなくなる場合があります。

注意: ADT では、インターネットリソースに接続して証明書の失効リストの確認およびタイムスタンプの取得を行うために、適切であれば、Java ランタイム環境のプロキシ設定を使用します。ADT の使用時にインターネットリソースへの接続の問題が発生し、特定のプロキシ設定がネットワークに必要な場合、JRE プロキシ設定の構成が必要になることがあります。

AIR 署名オプションの指定

 -package コマンドと -prepare コマンドの ADT 署名オプションを指定するには、次のシンタックスを使用します。
[-alias aliasName] [-storetype type] [-keystore path] [-storepass password1] [-keypass password2] [-providerName className] [-tsa url]

-alias aliasName — キーストアのキーのエイリアスです。キーストアに含まれている証明書が 1 つだけの場合、エイリアスを指定する必要はありません。エイリアスを指定しない場合、ADT ではキーストアの最初のキーが使用されます。

キーストア管理アプリケーションによっては、証明書にエイリアスを割り当てることができません。例えば、Windows システムのキーストアを使用している場合は、証明書の識別名をエイリアスとして使用します。エイリアスを指定できるように、Java Keytool ユーティリティを使用して使用可能な証明書を一覧表示することができます。例えば、次のコマンドを実行します。

keytool -list -storetype Windows-MY

このコマンドでは、証明書に関する次のような出力が生成されます。

CN=TestingCert,OU=QE,O=Adobe,C=US, PrivateKeyEntry, 
Certificate fingerprint (MD5): 73:D5:21:E9:8A:28:0A:AB:FD:1D:11:EA:BB:A7:55:88

ADT コマンドラインでこの証明書を参照するには、エイリアスを次のように設定します。

CN=TestingCert,OU=QE,O=Adobe,C=US

Mac OS X では、Keychain での証明書のエイリアスは、Keychain Access アプリケーションに表示される名前です。

-storetype type — キーストアのタイプで、キーストアの実装によって決まります。Java のほとんどのインストールに付属しているデフォルトのキーストア実装では、JKS タイプおよび PKCS12 タイプがサポートされています。Java 5.0 には、ハードウェアトークンのキーストアにアクセスするための PKCS11 タイプと、Mac OS X Keychain にアクセスするための Keychain タイプのサポートが含まれています。Java 6.0 には、MSCAPI タイプ(Windows で使用)のサポートが含まれています。他の JCA プロバイダがインストールされ、構成されている場合は、さらに別のキーストアタイプを使用できることがあります。キーストアタイプを指定しない場合、デフォルトの JCA プロバイダのデフォルトタイプが使用されます。

ストアタイプ

キーストア形式

Java の必要最低バージョン

JKS

Java キーストアファイル(.keystore)

1.2

PKCS12

PKCS12 ファイル(.p12 または .pfx)

1.4

PKCS11

ハードウェアトークン

1.5

KeychainStore

Mac OS X Keychain

1.5

Windows-MY または Windows-ROOT

MSCAPI

1.6

-keystore path — ファイルベースのストアタイプのキーストアへのパスです。

-storepass password1 — キーストアへのアクセスに必要なパスワードです。指定しない場合、パスワードの入力を求めるプロンプトが表示されます。

-keypass password2 — AIR アプリケーションへの署名に使用する秘密キーへのアクセスに必要なパスワードです。指定しない場合、パスワードの入力を求めるプロンプトが表示されます。

-providerName className — 指定したキーストアタイプの JCA プロバイダです。指定しない場合、ADT ではそのキーストアタイプのデフォルトプロバイダが使用されます。

-tsa url — 電子署名にタイムスタンプを付与する RFC3161http://www.ietf.org/rfc/rfc3161.txt 準拠のタイムスタンプサーバの URL を指定します。URL を指定しない場合、GeoTrust が提供するデフォルトのタイムスタンプサーバが使用されます。AIR アプリケーションの署名にタイムスタンプを付与すると、署名時にその証明書が有効であったことがタイムスタンプによって保証されるので、署名証明書の有効期限が切れた後でもアプリケーションをインストールできます。

ADT がタイムスタンプサーバに接続できない場合、署名はキャンセルされ、パッケージは生成されません。タイムスタンプの付与を無効にするには、-tsa none を指定します。ただし、タイムスタンプなしでパッケージ化された AIR アプリケーションは、署名証明書の有効期限が切れるとインストールできなくなります。

注意: これらの署名オプションは、Java Keytool ユーティリティの同等のオプションに似ています。Keytool ユーティリティを使用すると、Windows でキーストアを調査することも、管理することもできます。Mac OS X での同じ目的のために、Apple® セキュリティユーティリティを使用することもできます。

署名オプションの例

.p12 ファイルを使用した署名

-storetype pkcs12 -keystore cert.p12

デフォルトの Java キーストアを使用した署名

-alias AIRcert -storetype jks

特定の Java キーストアを使用した署名

-alias AIRcert -storetype jks -keystore certStore.keystore

Mac OS X Keychain を使用した署名

-alias AIRcert -storetype KeychainStore -providerName Apple

Windows システムのキーストアを使用した署名

-alias cn=AIRCert -storeype Windows-MY

ハードウェアトークンを使用した署名(トークンを使用するように Java を構成する方法と正しい providerName 値については、トークンの製造メーカーの説明書を参照してください)

-alias AIRCert -storetype pkcs11 -providerName tokenProviderName

タイムスタンプの埋め込みなしでの署名

-storetype pkcs12 -keystore cert.p12 -tsa none

ADT を使用した未署名の AIR 中間ファイルの作成

-prepare コマンドを使用すると、未署名の AIR 中間ファイルを作成できます。有効な AIR インストールファイルを生成するには、ADT の -sign コマンドで AIR 中間ファイルに署名する必要があります。

-prepare コマンドは、-package コマンドと同じフラグおよびパラメータを受け取ります(署名オプションを除く)。唯一の違いは、出力ファイルが未署名である点です。中間ファイルは、airi というファイル名拡張子で生成されます。

AIR 中間ファイルに署名するには、ADT の -sign コマンドを使用します(ADT を使用した AIR 中間ファイルへの署名を参照)。

ADT の例

adt –prepare unsignedMyApp.airi myApp.xml myApp.swf components.swc 
 
adt –prepare unsignedMyApp.airi myApp.xml myApp.html AIRAliases.js image.gif

ADT を使用した AIR 中間ファイルへの署名

ADT で AIR 中間ファイルに署名するには、-sign コマンドを使用します。sign コマンドは、AIR 中間ファイル(拡張子 airi)に対してのみ有効です。AIR ファイルに 2 回署名することはできません。

AIR 中間ファイルを作成するには、adt -prepare コマンドを使用します(ADT を使用した未署名の AIR 中間ファイルの作成を参照)。

AIRI ファイルへの署名

 ADT の -sign コマンドを次のシンタックスで使用します。
adt -sign SIGNING_OPTIONSairi_fileair_file

SIGNING_OPTIONS この署名オプションは、AIR ファイルへの署名に使用する秘密キーと証明書を特定します。これらのオプションについては、ADT コマンドラインの署名オプションで説明しています。

airi_file 署名する未署名の AIR 中間ファイルのパスです。

air_file 作成する AIR ファイルの名前です。

ADT の例

adt –sign -storetype pkcs12 -keystore cert.p12 unsignedMyApp.airi myApp.air

詳しくは、AIR ファイルへの電子署名を参照してください。