Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
83
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
83
Help us understand the problem. What are the problem?