zipalign

zipalignはAndroidアプリケーションファイル(.apkファイル)において重要な最適化である、アーカイブのアラインメントを行うツールです。このツールは、全ての非圧縮状態データがファイル先頭から特定のアラインメントに従って始まるように調整を行う機能を持ち、とりわけ.apkファイル内の画像や生ファイルなど、非圧縮データを4バイト境界にアラインメントするために使われます。これにより、アラインメント制約のあるバイナリデータを含む全ての内部データに対してmmap()でのアクセスが出来るようになり、結果的にアプリケーション実行時のメモリ消費量低減に役立ちます。

手動でのパッケージングを行う場合、エンドユーザへの配布前には必ずこのツールで.apkファイルのアラインメントを行うようにして下さい(Androidビルドツール内では自動的に実行されます)。eclipseとADTプラグインを利用している場合はExportウィザードからの出力時、ファイルへの秘密鍵での署名を行った後で自動的にzipalignが実行されます。また、このツールはAnt内で利用されるビルドスクリプトからも自動的に実行されますが、プロジェクトのbuild.propertiesファイル内にキーストアとキーエイリアスが指定されていない場合はビルドツールでのパッケージに対する署名自体が行えないため、実行されません。

注意:zipalignは必ず.apkファイルに対する秘密鍵での署名を行った後で実行して下さい。zipalignを署名前に実行した場合は、署名処理によって更にアラインメントが崩れてしまいます。また、アライン済みのパッケージ内のファイルリネームや削除によって以降のアラインが全て崩れる可能性があります。更に、アライン済みのアーカイブに対して追加されたファイルはアラインされません。

この調整はzipファイルのLocal File Headerセクションに書かれた"extra"フィールドのサイズを変更することで行われています。このため、zipalignコマンドの実行によって既存の"extra"フィールドデータが変更される可能性があります。

アプリケーションビルドに際してのzipalignの使い方はSigning Your Applicationを参照して下さい。

使い方

infile.apkのアラインメントを調整し、outfile.apkとして保存する場合は

zipalign [-f] [-v] <alignment> infile.apk outfile.apk

と指定します。一方、existing.apkのアラインメントを確認擂るためには

zipalign -c -v <alignment> existing.apk

と指定します。<alignment>にはアラインメント境界となる整数値を指定しますが、4(32bit境界を意味します)以外を指定しても意味はありません。

フラグ