配布する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実施後にパッケージの変更を行ってはいけない。