The Android Developer Challenge is back! Submit your idea before December 2.

zipalign

zipalign は、Android アプリ(APK)ファイルを最適化するためのアーカイブ アライメント ツールです。このツールにより、すべての非圧縮データが、ファイルの先頭を基準とする特定のアライメントで開始されるようになります。具体的には、画像や未加工ファイルなど、APK 内のすべての非圧縮データを 4 バイト境界に揃えます。これにより、アライメント制限のあるバイナリデータが含まれている場合でも、すべての部分に対して mmap() で直接アクセスできるようになります。メリットとして、アプリの実行時に消費される RAM の量が減ります。

APK ファイルをエンドユーザーに配布する前に、必ずこのツールを使用してアライメントを調整するようにしてください。この処理は Android ビルドツールで行うことができます。Android Studio は、APK のアライメントを自動的に調整します。

注: 使用するアプリ署名ツールに応じて、アプリビルド プロセス内の 2 つのポイントのいずれかで zipalign を使用する必要があります。

  • apksigner を使用している場合、必ず APK ファイルが署名されるに zipalign を実行する必要があります。apksigner を使用して APK に署名した後で APK に変更を加えると、その署名は無効になります。
  • jarsigner を使用している場合、必ず APK ファイルが署名されたに zipalign を実行する必要があります。

調整は、zip ローカル ファイル ヘッダー セクションの [extra] フィールドのサイズを変更することで行われます。このプロセスによって、[extra] フィールド内の既存のデータが変更される場合があります。

アプリのビルド時に zipalign を使用する方法については、アプリに署名するをご覧ください。

使用方法

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

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

existing.apk のアライメントを確定するには:

zipalign -c -v <alignment> existing.apk

<alignment> は、バイト アライメント境界を定義する整数です。この値は常に 4(32 ビット アライメント)にする必要があります。そうでない場合、実際には何の効果もありません。

フラグ:

  • -f: 既存の outfile.zip を上書きします。
  • -v: 詳細な出力を行います。
  • -p: infile.zip 内のすべての共有オブジェクト ファイルに対して、同一のページ アライメントを outfile.zip で使用します。
  • -c: 指定したファイルのアライメントを確定します。