すでにいろいろ既出であろう、
Androidのapkファイル縮小の旅。
自分でもちゃんと試しておかないとねという事で
やってみました。
まぁ単純にHelloWorldを縮小してみるという話です。
プロジェクトは一番最新のAPIレベル17(Android 4.2)でコンパイルしてます。
①初期状態のプロジェクトをapkしてみる。
プロジェクトを作ったら何も考えずにapkファイルにしてみます。
そうすると
![うつ病miwawaの日記帳](https://stat.ameba.jp/user_images/20121231/20/miwawa08/3f/27/j/t02200086_0465018112356334772.jpg?caw=800)
175KB
#環境によっては違うかもしれません。
何もしてないのに175KBはちょっと大きい気がして残念な気持ちになりました。
②ProGuardを適応させてみる。
コードを難読化するだけでなくapkファイルも縮小してくれるProGuardを試してみます。
適応方法は簡単です。※ADT17以降の方法です。
1.プロジェクト内にあるproject.propertiesを開く
2.ソース内の赤字部分を削除しコメントを解除する
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
↓
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
3.保存でOK。
4.apkを作るとき
プロジェクトを右クリック>[Android Tools]>[Export Signed Application Package]
でapkを生成する。
できたapkをみると。
半分以下にしてくれました。
ただ適応するには注意点もありそうです。
詳しくは下記サイトさまが参考になるかと思います。
http://d.hatena.ne.jp/bs-android/20120325/1332662384
http://blog.fly1ncu.com/2012/08/android-proguard/
③リソースファイルを圧縮する。
今回はテストということで、初期配置してある各drawableフォルダの
ic_launcher.pngをいじってみました。
デフォルトのic_launcher.pngは24bitPNG(インターレスあり)、解像度72dpiっぽいので
下記の2パターンに変えてみました。
パターン1
24bitPNG(インターレスなし)に変えてみる。
インターレスはダウンロードの進行に合わせて段階的に画像を表示してくれる形式なのですが
正直、恩恵は受けていないと思います。
この設定が「あり」になってるだけでファイル容量は上がりますので「なし」にしてみます。
結果、175KB
apkのサイズは最初と変わりませんでした。。。
※画像ファイル自体はdrawable-xhdpiのic_launcher.pngの場合、3kほど違っていました。
パターン2
8bitPNGに変えてみる。
完全な透過にはならないので実際に透過画像を用意する場合は使えないですが
ためしに8bitPNGに変えてみました。
結果、165KB
最初より10KBほど下がりました。
あまりパターン1はあまり効果的ではなさそうですが
パターン2のように透過の必要ない画像は8bitPNGやGIFやJPGにしたりするのは効果がありそうです。
SVGにしちゃったりもいいかもしれません。
他にもJPGならクオリティなんかいじったり、PNGやGIFなら256色を下げてみたりとか。
あと音源系だったらビットレートを変えてみたり。圧縮形式を考えてみたりもできますね。
聞こえ方はぶっちゃけ端末によりますのでどこまでクオリティを求めるかはおまかせです。
※ちなみに自分はライセンスフリーなogg(Cubaseで処理)を基本使いますが
クオリティを100%のものと30%のものを比べても端末自体のスピーカがあれなので聞こえはそんな変わりませんでした。
ん~やってみて思いましたが
一番、ProGuardが効きますね。セキュリティ的な面でも。
リソースファイルは色々試してみる事はできるものの
膨れる分は膨れてしまうのである程度は切り捨てないとという気がしました。
最後にProGuard+8bitPNGに直したものだと59.1KBでした。。
そんなapkファイル縮小の旅でした。