1. kazuqqfp

    Posted

    kazuqqfp
Changes in title
+Androidにおいてなぜzipalignをやる必要があるのか
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,37 @@
+配布するapkファイルはzipalignコマンドで最適化する事が推奨されており、
+最適化されていないapkファイルをgoogleのディベロッパーコンソールでアップしようとすると警告が出る。
+
+zipalignとは何をしているのか。実施しないと何が悪いのかをまとめる。
+
+# 何をしているのか
+
+apk内のリソースファイルなどの未圧縮データを4バイトバウンダリに整列している。
+
+# 実施しないと何が悪いのか
+Androidでは、データが4バイトバウンダリに整列されている時に効率良くそのデータにアクセスする事が出来る。
+
+逆に整列されていない場合、その整理されていないデータを正しく読むために遅くなり、また多くのメモリを消費するようになる。
+
+apkファイル内のデータは複数のプロセスによってアクセスされる。
+(インストーラがマニフェストを読んでアプリケーションに関連する許可をハンドリングする、ホームアプリケーションがリソースを読んでアプリケーションの名前やアイコンを取り出す、システムサーバがリソースを読んで通知などを行う、アプリケーション自身がapkファイルを読む)
+zipalgn未実施のアプリがいくつかあると、その複数プロセスが多くのメモリを消費する結果として、メモリの圧迫が増加し、プロセスの強制終了&開始が頻繁に行われるようになる。
+最悪の場合、デバイスのバッテリー寿命が短くなってしまう。
+
+zipalignを実施して、プロセスがapkファイル内のデータに効率良くアクセス出来るようにしましょう。
+
+# おまけ
+以下のコマンドでzipalignを実施する事が出来る。
+
+```shell-session:
+zipalign -f -v 4 example.apk example_release.apk
+```
+
+以下のコマンドでzipalign実施済みかどうかの確認が出来る。
+
+```shell-session:
+zipalign -c -v 4 example_release.apk
+```
+
+zipalignは署名の後で実施する。
+zipalign実施後に署名をすると、署名の過程で整形が無効になってしまう。
+同様の理由で、zipalign実施後にパッケージの変更を行ってはいけない。