先日メモ帳アプリ「Tiny Note」のアップデート版を作っていたときに実験的に必要なさそうなファイルを手当たり次第に消しまくってからビルドしてみたところ、APKファイルのサイズを削減することができました。
正直やっていいことなのかもよくわかっていないのですが、とりあえず書き留めておきます。
- 開発環境:MonacaクラウドIDE
- ビルドの種類:Android リリースビルド
サイズ削減効果
まず結果をご覧ください。
- 一番上のファイルはCrosswalkプラグインを導入した現行版のAPKファイルです。Android4.xに対応するためとはいえシンプルなメモ帳が28MB…。
Crosswalkプラグイン – Monaca Docs - 二番目のファイルは上述のAPKファイルからCrosswalkプラグインを外して作成したアップデート版のAPKファイルです。
実際は機能追加やライブラリのバージョンアップなどが含まれています。
「外した」というかアプリのプロジェクトを開いたら自動的に外れちゃったんですけどね。Monacaでは今年1月からCrosswalkプラグインのサポートを終了したそうです。私としてはもともと今回のアップデートで外したかったのでちょうどよかったです。
MonacaがCordova 7.1に対応しました! – モナカプレス
ちなみにCrosswalkプラグインを新たにインポートしてみたのですが、ビルド画面に移動するとエラーメッセージが表示されました。結局このエラーを解消できずビルドすることができませんでした。サポート終了というか使用禁止? - そして、三番目のファイルが今回サイズ削減を行ったAPKファイルです。二番目のファイルから約2.7MB減りました。50~100MBクラスのAPKファイルですとほとんど効果を感じられないと思いますが、このアプリくらいのサイズではなかなか効果的な改善に見えます。
APKファイルの中身を見てみる
前述の二番目のAPKファイルはMonacaクラウドIDEで普通にビルドして作成したもので、これまでと同様にこれを最終版にしようと考えていました。28MBを5MBにできたので十分です。ところがリリース前にGoogle Playでいろいろなメモ帳アプリを眺めていたところ、1MB程度のメモ帳アプリが何個もあることに気づきました。
何が違うんだろうという思いからAPKファイルの中身を調べてみることにしました。
以下はウィキペディアのAPK (ファイル形式)からの引用です。
APK (Android application package、アンドロイドアプリケーションパッケージ、エーピーケー )とは、Googleによって開発されたAndroid専用ソフトウェアパッケージのファイルフォーマットである。
JARファイルをベースとしたZIP形式で、アーカイブファイルの一種である。
なんでAAPじゃないのか一瞬気になりましたが、APPと間違えやすいからとか拡張子としてすでに使われているからとか拡張子って人の名前っぽいとか気にしてもきりがないので気にしないことにしました。
まずAPKはZIP形式のファイルということで、拡張子をzipに書き換え解凍してみます。
解凍してできたフォルダの中はこんな感じです。見慣れないファイルがたくさんあります。
assets/www/components/onsenui/cssフォルダまで移動してみます。ここでさすがに気づきました。あきらかに使われていないファイルがいると。
assets/www/components/onsenui/esmフォルダ内にもファイルがぎっしり。何のためのファイルかわからなかったのですが、調べてみると同じコードがonsenui.jsに記述されていました。ということはこれもいらなさそう。
このように実際にAPKファイルの中身を見たことで、これらの必要なさそうなファイルを消してみたくなりました。たくさんあるので消し甲斐がありそうです。
不要なファイルを削除
MonacaクラウドIDEでプロジェクトを開き、ファイル名を検索して使用されていないことを確認しながら一つ一つ削除していきます。
ファイル削除前
ファイル削除後
比べてみるとだいぶすっきりした感じがします。onsenui-core.cssなど名前的に消しにくい雰囲気のファイルも消しましたし、上述の画像で見えていないフォルダ内のファイルも消しています。
また、ファイル削除に伴い一か所だけファイルを修正しました。assets/www/components/onsenui/css/onsenui.min.cssの一行目、というかminifyされているので一行しかありませんが、そのほぼ先頭に書かれているionicons.min.cssとmaterial-design-iconic-font.min.cssのimport文を削除しました。
このファイル構成でビルドすることで約2.7MB削減することができました。
ちなみに私の場合、なにやらファイルを消しすぎたみたいでMonacaクラウドIDEのプロジェクトのアイコンまで消えてしまいました。
不穏な空気をまとっていますがIDE上のコンソールエラーなどもなく、とりあえず使用上問題なさそうです。
まとめ
このAPKファイル(Tiny Noteアップデート版)は無事にリリースすることができました。ちょっと手間がかかりますし余計なリスクも発生しますが、アプリのサイズを気にされている方は試してみてはいかがでしょうか。ただしファイルの削除は慎重に、そして自己責任でお願いします。
おまけ
この記事を書くためにネットでいろいろ調べていたら、APKサイズを削減するためのちゃんとした情報を2つ見つけました。
どちらも私にはちょっとハードルが高そうなので、もし今回リリースする前にこれらの情報を見つけたとしても手は出さなかったと思います。わかる方は試してみてはいかがでしょうか。私はこどもでもわかるやさしい解説記事を見つけたらやってみようと思います。