zipalignはAPKファイル内の画像やRAWデータなどの非圧縮データをファイルの先頭に配置するための最適化ツールです。具体的には、4バイトアラインメントで非圧縮データを配置し、mmapなどが直接APKにアクセスすることで実行時の省メモリ化が行えます。
APKの最適化は、APKを配布する前に常に行うべきです。「えっ!」と思った方はご安心ください。Eclipseで[エクスポート]ウィザードを使用してAPKを署名・生成している場合、自動的に最適化も施されています。AntなどでAPKを生成している場合は最適化を個別に行う必要があります。
zipalignはAPKファイルを署名した後に実施しなければなりません。もし、最適化後に署名した場合、最適化状態が署名により失われてしまいます。
使用方法は以下の通りです。
zipalign [-f] [-v] <alignment> [input <output>]
パラメーターは以下の意味を持っています。
<alignment>は、省略した場合は「4」(32bit)になります。
infile.apkを最適化したoutfile.apkを作成するには、以下のように行います。
zipalign -f -v infile.apk outfile.apk
existing.apkの整合性をチェックする場合は以下のように行います。
zipalign -c -v existing.apk
etc1toolはPNG画像をETC1圧縮/展開するツールです。「ETC」とは「Ericsson Texture Compression」という形式の圧縮方式の略称で、JPEGのような非可逆圧縮で圧縮後のサイズが小さい点、OpenGL ESで直接テクスチャとしてGPUが利用可能な点などが特徴です。「android.opengl」パッケージのETC1、ETC1Util、ETC1Util.ETC1Textureなどから利用します。
使い方は以下のように行います。
etc1tool foo.png
これで「foo.pkm」というファイルに出力されます。
PKM形式をPNG形式に戻すには以下のように行います。
etc1tool foo.pkm --decode -o foo2.png
その他のオプションについては、公式ドキュメントを参照してください。
Draw 9-Patchは、縦横に伸長可能なイメージをWYSIWYGで作成するためのツールです。リソースを9個に分割することから、この名前が付けられています。
ツール上で、縦横に拡大された際に、どの範囲を伸長するかを指定可能で、主に図の枠線を保護する目的で使用します。
画像の指定した一部を伸長できるようになるため、以下のような変形を行わせることも可能です。
このツールで作成したリソースは、NinePatchクラスを経由して描画します。
mksdcardはエミュレーター(Android Emulator)のためにFAT32でフォーマットされた仮想SDカードを作成するためのツールです。複数人で同じ内容の仮想SDカードを共有するような目的に適しています。
使用方法は以下の通りです。
mksdcard -l <label> <size> <file>
<label>はボリュームラベルを指定します。<size>は仮想SDカードのサイズをK(キロバイト)、M(メガバイト)または無指定(バイト)単位で指定します。<file>は仮想SDカードのファイル名を指定します。
例えば、以下のように作成します。
mksdcard -l mySdCard 1024M mySdCardFile.img
作成した仮想SDカードは以下のようにエミュレーター起動時に指定して使用可能です。
emulator -sdcard <file>
仮想SDカードにファイルをコピーするには、上記のようにエミュレーターを起動して、「adb push」コマンドで送信するのが手っ取り早いですが、「mtools」コマンドのようなFATディスクイメージを扱えるユーティリティを利用してエミュレーターなしで仮想SDカードを任意の状態にセットアップすることも可能です。
Google Playでは、50MBを超えるAPKをアップロードできません。巨大なリソースを必要とするアプリは、別途APKの拡張ファイルを利用することになります(または独自サーバーを用意します)。ファイル形式は任意ですが、Androidの標準APIで展開できるZIPやOBBなどのコンテナ形式が便利です。
jobbはOBB(Opaque Binary Blobs)ファイルを作成するツールです。OBBはディスクイメージのことで、「StorageManager#mountObb(……)」でAndroidのファイルシステムのいずれかにマウントされます。マウントされた後は通常のファイルシステムと同様のアクセスが可能です。
使用方法は以下の通りです。
jobb [-d <directory>][-o <filename>][-pn <package>] \ [-pv <version>][-k <key>][-ov][-dump <filename>][-v][-about]
例えば、API Level 11以降で動作する「com.my.app.package」というパッケージ向けに「/temp/assets/」以下を「secret-key」というフレーズで暗号化し、「my-app-assets.obb」というファイルに固めるには以下のように行います。
jobb -d /temp/assets/ -o my-app-assets.obb -k secret-key -pn com.my.app.package -pv 11
Storage ManagerおよびOBBファイル自体の情報を扱うツール「ObbScanner」「ObbInfo」はAPI Level 9以降で利用可能です。
その他、詳細なオプションの説明は公式ドキュメントを参照ください。
bmgrはAPI Level 8以降のAndroid端末上のバックアップマネージャーと対話可能なシェルツールです。adbシェルのサブコマンドとして利用します。
詳しくは、連載第44回の「あなたのアプリはクラウドにデータをバックアップできますか?」を参照ください。
今回はAndroid SDKに付属する知られざるツールを紹介してみました。紹介した多くのツールはEclipse ADTに取り込まれているため、あまり積極的にツール単体で利用することはなかったかもしれません。ProGuardやzipalignなどはアプリのビルドを自動化したい場合などに気を配る必要があり、そうしたケースで今回の記事が参考になれば幸いです。
今回解説予定だった画面の動画キャプチャやモンキーテストは、UI操作自動化と一緒に独立した記事として詳しく解説したいため、今回は省略しています。またの機会まで、ご期待ください。
Copyright © ITmedia, Inc. All Rights Reserved.