Androidにおいてなぜzipalignをやる必要があるのか

  • 78
    Like
  • 0
    Comment
More than 1 year has passed since last update.

配布するapkファイルはzipalignコマンドで最適化する事が推奨されており、
最適化されていないapkファイルをgoogleのディベロッパーコンソールでアップしようとすると警告が出る。

zipalignとは何をしているのか。実施しないと何が悪いのかをまとめる。

何をしているのか

apk内のリソースファイルなどの未圧縮データを4バイトバウンダリに整列している。

実施しないと何が悪いのか

Androidでは、データが4バイトバウンダリに整列されている時に効率良くそのデータにアクセスする事が出来る。

逆に整列されていない場合、その整理されていないデータを正しく読むために遅くなり、また多くのメモリを消費するようになる。

apkファイル内のデータは複数のプロセスによってアクセスされる。
(インストーラがマニフェストを読んでアプリケーションに関連する許可をハンドリングする、ホームアプリケーションがリソースを読んでアプリケーションの名前やアイコンを取り出す、システムサーバがリソースを読んで通知などを行う、アプリケーション自身がapkファイルを読む)
zipalgn未実施のアプリがいくつかあると、その複数プロセスが多くのメモリを消費する結果として、メモリの圧迫が増加し、プロセスの強制終了&開始が頻繁に行われるようになる。
最悪の場合、デバイスのバッテリー寿命が短くなってしまう。

zipalignを実施して、プロセスがapkファイル内のデータに効率良くアクセス出来るようにしましょう。

おまけ

以下のコマンドでzipalignを実施する事が出来る。

zipalign -f -v 4 example.apk example_release.apk

以下のコマンドでzipalign実施済みかどうかの確認が出来る。

zipalign -c -v 4 example_release.apk

zipalignは署名の後で実施する。
zipalign実施後に署名をすると、署名の過程で整形が無効になってしまう。
同様の理由で、zipalign実施後にパッケージの変更を行ってはいけない。