[Adobe AIR Advent Calendar 2013 17日目] ADT(AIR Development Tool)を知ろう

投稿者: | 2013/12/25

この記事は「Adobe AIR Advent Calendar 2013」の17日目の記事です。
17日は(ry

はじめに

この記事は2013年12月現在の情報です。今後のアップデートによってはADTのコマンドの追加・削除・修正が行われますので、記事と異なる点が出てくる可能性があることにご注意ください。また、ADTを知らない人向けなので、知っている人は特に読む必要はないかと思います。

ADTとはなんぞや

ADTとは、AIR Development Toolの略で、AIR SDK内に入っています。その名の通り、AdobeAIRのアプリケーションを開発するためのコアとなるアプリケーションです。

皆さんは、普段FlashProfessionalやFlashBuilder、あるいはサードパーティー製のIDEやエディタでAIRアプリを作成されているかと思いますが、ビルドなどを行う際、裏ではADTが使用されています。ですので、自分で直接使うことはなくても、知らず知らずのうちに皆さんがお世話になっているアプリケーションです。これがなければIDEなんて只のエディタです。

以下の機能が提供されています。(リファレンスより抜粋)

  • AIR アプリケーションを .air インストールファイルとしてパッケージ化する
  • AIR アプリケーションをネイティブインストーラー(Windows の .exe インストーラーファイル、iOS の ipa または Android の .apk など)としてパッケージ化する
  • ネイティブ拡張を AIR ネイティブ拡張(ANE)ファイルとしてパッケージ化する
  • AIR アプリケーションを電子証明書で署名する
  • アプリケーションのアップデートで使用される電子署名を変更(移行)する
  • コンピューターに接続されているデバイスを確認する
  • 自己署名入りデジタルコード署名証明書を作成する
  • モバイルデバイスに対して、アプリケーションをリモートでインストール、起動、およびアンインストールする
  • モバイルデバイスに対して、AIR ランタイムをリモートでインストールおよびアンインストールする

AIRを扱ったことがある方は、上記の項目に覚えがあるはずです。普段お世話になっている機能はADTより提供されていることがお分かりいただけたのではないでしょうか。

ADTはJavaで作成されているので、実行にはJavaランタイムが必要となります・・・などといった詳細に関しては、本家リファレンスにお任せしましょう。
http://help.adobe.com/ja_JP/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7fd9.html

さて

普段は直接使うことのないADTですが、たまに、どうしても使用しなくてはならない状況に陥ることが有ります。

  • ADTで提供されている機能がIDEで対応していない(できない)
  • バージョンアップで便利な機能が増えたけど、IDEが対応していない(できない)
  • アプリからADTを扱うアプリケーションを作成する必要が出てきた(ADTを扱うためのGUIツール作成とか)

例えば、ANE(AIR Native Extension)はAIR3.0から出てきましたが、この時はANEをIDEから扱うことはできませんでした。後ほどFlashBuilderやFDTが対応しましたが。

そんな場合、ビルドをする際にはIDEではなくADTを直接扱う必要があったわけですが、ADTは「コマンドラインツール」ですので、その時点で一気に怖気づいてしまう人もいらっしゃるでしょう。僕もその中のひとりですが。黒い画面怖い。

そんな、「ヘルプを見ても呪文を書いているようにしか見えない」という方々のために、ここで少しだけ解説をしたいと思います。

なお、本家のサイトに詳細は載っていますので、あくまで簡単な説明だけ行います。

一緒にやっていきたい方は、Adobeのサイトより「AIR SDK」をダウンロードしてきてください。いろいろわかってる人は、FlashBuilder内のAIR SDKを使うなどご自由に。
http://www.adobe.com/devnet/air/air-sdk-download.html

ADTの機能一覧

まずはヘルプを見てみましょう。なお、すでにAIR SDKのパスが通ってたりする人はわかっている人だと思うので、「adt -help」でヘルプ出しちゃってください。

  1. ダウンロードしてきたAIR SDKを解凍し、binフォルダ内にあるadt(adt.exe)を見つけてください。
  2. Macの人はターミナル、Windowsの人はコマンドプロンプトを起動してください。
  3. 起動した画面に先ほどのadtファイルをドラッグ&ドロップすると、adtのパスが自動的に書かれると思います。
  4. その後に半角スペースを打ち、「-help」と打ってください。この段階で、だいたい「/Users/username/Desktop/AIRSDK/bin/adt -help」といった感じで文字列が並んでいるかと思います。
  5. エンターキーを押してください。

ADT

ズラーっと機能が出てきて目眩がするかと思いますが、これら1行1行が、ADTにて扱うコマンドの紹介になります。機能を大きく分けると、「証明書関連」「パッケージ関連」「デバイス関連(パッケージの転送含む)」「その他」になると思います。

  • 証明書関連:証明書の発行、付与など。
  • パッケージ関連:開発者が一番扱う機能です。AIRアプリのビルドですね。
  • デバイス関連:どんなデバイスが接続するか見たり、インストールしたりします。実機転送の類ですね。AIR for mobileをやってらっしゃる方は、実は頻繁に使っている機能になります。
  • その他:ヘルプ出力・バージョン情報出力。

とりあえず分けてみたのが以下です。分けるに微妙なコマンドもありますが、あまり気にしないでください。

■証明書関連

 adt -checkstore SIGNING_OPTIONS
 adt -certificate -cn <name> ( -ou <org-unit> )? ( -o <org-name> )? ( -c <country> )? ( -validityPeriod <years> )? ( 1024-RSA | 2048-RSA ) <pfx-file> <password>
 adt -sign SIGNING_OPTIONS ( -target ( air | airn | ane ) )? ( <airi-file> | <unsigned-ane-file> ) <output-file>
 adt -migrate SIGNING_OPTIONS ( <air-file-in> | <airn-file-in> ) <output-file>

■パッケージ関連

 adt -package SIGNING_OPTIONS ( -target air )? <output-package> ( <app-desc> FILE_OPTIONS | <input-package> )
 adt -package SIGNING_OPTIONS -target airn <output-package> ( <app-desc> FILE-AND-PATH-OPTIONS | <input-package> )
 adt -package -target ( apk | apk-debug | apk-emulator | apk-captive-runtime ) ( CONNECT_OPTIONS? | LISTEN_OPTIONS? ) ( -airDownloadURL <url> )? SIGNING_OPTIONS <output-package> ( <app-desc> PLATFORM-SDK-OPTION? FILE-AND-PATH-OPTIONS | <input-package> PLATFORM-SDK-OPTION? )
 adt -package -target ( ipa-test | ipa-debug | ipa-app-store | ipa-ad-hoc | ipa-test-interpreter | ipa-debug-interpreter | ipa-test-interpreter-simulator | ipa-debug-interpreter-simulator ) ( CONNECT_OPTIONS? | LISTEN_OPTIONS? ) ( -sampler )? ANE_LINK_OPTIONS? SIGNING_OPTIONS <output-package> ( <app-desc> PLATFORM-SDK-OPTION? FILE-AND-PATH-OPTIONS | <input-package> PLATFORM-SDK-OPTION? )
 adt -package SIGNING_OPTIONS? -target native SIGNING_OPTIONS? <output-package> ( <app-desc> FILE-AND-PATH-OPTIONS | <input-package> )
 adt -prepare <airi-file> <app-desc> FILE_AND_PATH_OPTIONS
 adt -package SIGNING_OPTIONS? -migrate SIGNING_OPTIONS -target native SIGNING_OPTIONS? <output-package> <app-desc> FILE_OPTIONS PATH-OPTION
 adt -package SIGNING_OPTIONS? -target bundle SIGNING_OPTIONS? <output-package> ( <app-desc> FILE-AND-PATH-OPTIONS | <input-package> )
 adt -package SIGNING_OPTIONS? -target ane <output-package> <ext-desc> ANE_OPTIONS

■デバイス関連(パッケージの転送含む)

 adt -devices PLATFORM-OPTION PLATFORM-SDK-OPTION?
 adt -installRuntime PLATFORM-OPTION PLATFORM-SDK-OPTION? DEVICE-OPTION? ( -package <apk-file> )?
 adt -installApp PLATFORM-OPTION PLATFORM-SDK-OPTION? DEVICE-OPTION? -package <apk-file | ipa-file>
 adt -uninstallRuntime PLATFORM-OPTION PLATFORM-SDK-OPTION? DEVICE-OPTION?
 adt -uninstallApp PLATFORM-OPTION PLATFORM-SDK-OPTION? DEVICE-OPTION? -appid <app-id>
 adt -launchApp { PLATFORM-OPTION PLATFORM-SDK-OPTION? DEVICE-OPTION? ( -debuggerPort port )? -appid <app-id> }
 adt -runtimeVersion PLATFORM-OPTION PLATFORM-SDK-OPTION? DEVICE-OPTION?
 adt -appVersion PLATFORM-OPTION PLATFORM-SDK-OPTION? DEVICE-OPTION? -appid <app-id>

■その他

 adt -help
 adt -version

「その他」は説明不要ですかね。「-help」は先程も行ったとおり、adtファイルの使い方のテキストを出力するものであり、「-version」はadtのバージョンが出力されます。実際にコマンドプロンプト、あるいはターミナルで実行してみてください。

では、

軽くそれぞれの機能の列挙をして、ADTの概要を掴んでみましょう。ほとんど本家サイトからの抜粋ですが。

■証明書関連

  • checkstore
    • キーストアの有効性を確認できます
  • certificate
    • 自己署名入りデジタルコード署名証明書を作成できます。
  • sign
    • AIRI および ANE ファイルに署名します。
  • migrate
    • AIR ファイルに移行署名を適用します。証明書の更新や変更をする際に扱います。

■パッケージ関連

これはちょっとコマンド毎だと分かりづらいので、もっとわかりやすい形で紹介しましょう。

  • デスクトップ用のAIRインストーラーファイルを作成
  • デスクトップ用のネイティブインストーラーファイルを作成
  • AIR for Android用のパッケージング
  • AIR for iOS用のパッケージング
  • AIRIのパッケージング(これはpackageコマンドではなくprepareコマンドを扱います)
    • あんまり聞き慣れないと思うので注釈を入れると、「AIR Intermediate」の略で、「署名がされていないAIRパッケージ」を指します。このファイルは署名されるまでインストールはできません。まぁなんか「判子押されていない契約書」みたいな感じです。
  • AIRNのパッケージング
    • 「拡張テレビプロファイル内にあるデバイス用のネイティブアプリケーションパッケージ」らしいです。AIR for TVのことではないかと。
  • 「AIRインストーラー」→「ネイティブインストーラ」へのマイグレート
  • キャプティブランタイム
  • ANEのパッケージング

■デバイス関連

特に、AIR for mobileをやっていらっしゃる方は、これらの挙動に覚えがあるかと思います。

  • devices
    • 現在接続されているモバイルデバイスおよびエミュレーターのデバイス ID を表示します。
  • installRuntime
    • デバイスに AIR ランタイムをインストールします。
  • installApp
    • デバイスまたはエミュレーターにアプリケーションをインストールします。
  • uninstallRuntime
    • デバイスまたはエミュレーターから AIR ランタイムを完全に削除します。
  • uninstallApp
    • リモートデバイスまたはエミュレーターにインストールされているアプリケーションを完全に削除します。
  • launchApp
    • デバイスまたはエミュレーターにインストールされているアプリケーションを実行します。
  • runtimeVersion
    • デバイスまたはエミュレーターにインストールされている AIR ランタイムのバージョンを報告します。
  • appVersion
    • デバイスまたはエミュレーターにインストールされているアプリケーションのバージョンを報告します。

まぁこんな感じの機能が提供されていますよ、っていうことで、

本家リファレンスの方にも詳しい説明や例が書かれていますので、続きはそちらをご参照いただきたいのですが、折角なので、ものは試しということで、証明書関連のをちょっとやってみましょう。

まずは、証明書を作ってみましょう。

今までは恐らくFlashProfessional、FlashBuilderなどから作成していたと思いますが、今回はADTを直接扱ってみましょう。と言っても、そんな難しいことはありません。以下のコマンドを、ファイルパスなどを自分の環境に合うように変更して実行してみてください。

adt -certificate -cn SelfSign 1024-RSA /Users/username/Desktop/test.p12 password

デスクトップに「test.p12」ができたはずです。「unable to create output file」とエラーが出てしまった人は、p12の書き出し先のファイルパスを間違ってないか確認して下さい。adtのヘルプが出てしまった人は、コマンドが間違っていますので、再度見なおしてみてください。

さて。では解説しましょう。その前に下の画像を御覧ください。

fb_cert

これはFlashBuilder4.7の証明書作成画面です。これと照らしあわせて、証明書コマンドの内容を見てみると、分かりやすいと思います。

adt -certificate -cn <name> ( -ou <org-unit> )? ( -o <org-name> )? ( -c <country> )? ( -validityPeriod <years> )? ( 1024-RSA | 2048-RSA ) <pfx-file> <password>

いろいろなコマンドが連続で書かれてますが、この順番は必ず厳守してください

まず、「-certificate」は「ADTで証明書作りますよ」っていうコマンドです。

次の「-cn <name>」は<name>の部分に適当な文字列を入れてください。今回は「SelfSign」と入れています。一応リファレンスの説明ですと「新しい証明書の共通名として割り当てる文字列です。」とあります。恐らくKeystore関連だと思いますが、AIRで作る際には特に気にしなくてもよいでしょう。なお、FlashBuilderにはこの項目はありませんので、固定の文字列を使われていると考えられます。

 

次のコマンドから「( -ou <org-unit> )?」のように、何やらカッコとハテナマークが入っていますが、これは上記の画像を見てもらえれば分かるかと思いますが、オプショナルという意味です。これは正規表現をやられたことのある方はピンとくる表現でしょうか。直前の処理が0回か1回ある場合の識別に用いますね。そんなわけで「-ou(部署名)」「-o(組織名)」「-c(国)」「-validityPeriod(証明書の有効年数)」は書いても書かなくても良いです。validityPeriodは、指定しない場合5年の有効期限が自動的に指定されます。

次の「( 1024-RSA | 2048-RSA )」は、暗号化の種類の選択です。これのどちらかを書いてくださいね、っていうことです。ハテナマークが付いてないので、オプショナルではないです。

最後に、出力するファイルのパスとパスワードを書きます。

では、最後に

折角なのでもう一つ。作成したファイルの有効性を見てみましょう。これは、パスワードが合ってるかどうかを見るものです。下記のコマンドをファイルパスなどを書き直した上で実行してみてください。

adt -checkstore -storetype PKCS12 -keystore /Users/username/Desktop/test.p12 -storepass password

合っていれば、「valid password」とでます。

コマンドの説明を見てみますと以下のようになっています。

adt -checkstore SIGNING_OPTIONS

「-checkstore」はチェックするためのコマンドとして、「SIGNING_OPTIONS」とは何でしょう。実はADTのヘルプを見た際に、コマンドのリストの下に別のリストが有ったはずです。それを一部抜粋してみましょう。

SIGNING_OPTIONS : -storetype <type> ( -keystore <store> )? ( -storepass <pass> )? ( -alias <aliasName> )? ( -keypass <pass> )? ( -providerName <name> )? ( -tsa <url> )? ( -provisioning-profile <profile> )?

この証明書関連のコマンドは他のいろんなコマンドで使われるので、このように纏められて別途書かれているわけですね。なので、checkstoreのコマンドを展開してみると

adt -checkstore -storetype <type> ( -keystore <store> )? ( -storepass <pass> )? ( -alias <aliasName> )? ( -keypass <pass> )? ( -providerName <name> )? ( -tsa <url> )? ( -provisioning-profile <profile> )?

となります。先ほどの証明書作成のコマンドを理解したのであれば、このコマンドの読み方もなんとなく判るのではないでしょうか。

以上、ADTの簡単な説明でした。

ちなみに、上級者になってくると、Antというタスクツールを利用して、コマンドラインを使わずにビルドを行う環境を構築する方々もいます。いちいちコマンドラインを書きたくないとか、昔書いたのを再利用したいとか、ビルドだけじゃなくてもっと複雑な処理を一気に行いたいとか、いろいろ不満に感じ始めたら、そちらに手を出すのも一興ではないでしょうか。

それでは、今回は以上です。お疲れ様でした。