zipalign

zipalign は zip アーカイブ アライメント ツールです。アーカイブ内のすべての非圧縮ファイルを、ファイルの先頭を基準として揃えるようにします。これらのファイルに mmap(2) から直接アクセスできるようになるため、このデータを RAM にコピーする必要がなくなり、アプリのメモリ使用量を減らせます。

APK ファイルをエンドユーザーに配布する前に zipalign を使用して最適化します。Android Studio(Android Gradle プラグイン(AGP)を使用している)を使ってビルドした場合は、自動的に最適化されます。この場合、引き続き zipalign を使用して APK のアライメントが調整されていることを確認できますが、アライメントを調整する必要はありません。このドキュメントは、カスタム ビルドシステムの管理者を主に対象としています。

注意: ビルドプロセスの特定の時点で zipalign を使用する必要があります。この点は、使用するアプリ署名ツールによって異なります。

  • apksigner を使用する場合は、APK ファイルを署名するzipalign を使用する必要があります。apksigner を使用して APK に署名した後で APK を変更すると、その署名は無効になります。
  • jarsigner を使用する場合は(推奨されません)、APK ファイルの署名zipalign を使用する必要があります。

アライメントは、zipalign が zip ローカル ファイル ヘッダー セクションの "extra" フィールドのサイズを変更することで行われます。このプロセスでは、"extra" フィールドの既存のデータを変更することもできます。

使用方法

APK に共有ライブラリ(.so ファイル)が含まれている場合、-p を使用して、mmap(2) に適した 4 KiB のページ境界にライブラリがアライメントされるようにします。それ以外のファイル(zipalign に対する必須のアライメント引数によってアライメントが決定される)の場合、Android Studio は 32 ビットシステムと 64 ビットシステムの両方で 4 バイトにアライメントします。

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

zipalign -p -f -v 4 infile.apk outfile.apk

existing.apk のアライメントの調整を確認するには、次のコマンドを使用します。Android Studio または AGP を使用してビルドする場合は、このコマンドを使用して、APK のアライメントが調整されていることを確認します。

zipalign -c -v 4 existing.apk

オプション

次の表に、使用可能な zipalign オプションを示します。

オプション 説明
-c 配置のみを確認します(ファイルは変更しません)。
-f 既存の出力ファイルを上書きします。
-h ツールのヘルプを表示します。
-p 非圧縮の .so ファイルをページ揃えします。
-v 詳細な出力を行います。
-z Zopfli を使用して再圧縮します。