アプリ容量を削減しよう
Android,iOSでアプリ公開するにあたり、容量というものは重要な点になる。
大体の企業ゲームは100MB以内に抑えているだろう。
これは、一定以上のサイズだとWiFiからしか落とせない、などの制約があるからだ。
ミニゲームもできるだけ容量は小さいほうがいい。
では、どうやってアプリ容量を減らすべきだろうか。
例えば今まで自分が作ってきたUnityをAndroid出力し、APKのサイズを見てみよう。
dangerzone.apk 130.9 MB
おいおい、そんなに多量なデータ入れた覚えないぞ、と。
個人アプリ開発でとにかくフリーなアセットなどを入れ込むとこの状況は起こると思う。
そう、犯人は自分ではなく他アセットだ。
そういうときに見るべきは”apkのビルドログ”だ。
場所はOSによって変わるがこちらに出力される。
Uncompressed usage by category (Percentages based on user generated assets only):
Textures 58.3 mb 71.5%
Meshes 864.2 kb 1.0%
Animations 179.4 kb 0.2%
Sounds 2.3 mb 2.8%
Shaders 1.3 mb 1.6%
Other Assets 2.7 mb 3.3%
Levels 256.1 kb 0.3%
Scripts 4.9 mb 6.0%
Included DLLs 9.3 mb 11.4%
File headers 1.4 mb 1.8%
Total User Assets 81.6 mb 100.0%
Complete build size 566.2 mb
テクスチャが70%、DLLが11.5%使用している。
重くていらないものから削除するのが負荷や容量削減での鉄則だ。
例えばいらないスクリプトを削除したところで6%の4.9MBの中の
一部しか消えないわけで焼け石に水である。
更にその下の概要を見ていこう。
Used Assets and files from the Resources folder, sorted by uncompressed size:
5.3 mb 0.9% Assets/SpaceShipPack/Textures/Pixel Make Voyager/02_CockpitExtension/02_CockpitExtension_Specular.png
4.0 mb 0.7% Assets/_SpaceRace/Arts/smog.png
2.7 mb 0.5% Assets/SpaceShipPack/Textures/Pixel Make Voyager/02_CockpitExtension/02_CockpitExtension_Normal.png
2.7 mb 0.5% Assets/SpaceShipPack/Textures/Pixel Make Voyager/02_CockpitExtension/02_CockpitExtension_Emission.png
2.7 mb 0.5% Assets/SpaceShipPack/Textures/Pixel Make Voyager/02_CockpitExtension/02_CockpitExtension_Albedo.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Asteroid_NRM.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Asteroid_H.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Asteroid_G.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Asteroid_F.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Asteroid_E.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Asteroid_D.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Asteroid_C.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Asteroid_B.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Asteroid_A.png
2.7 mb 0.5% Assets/Vast Outer Space/Textures/Galaxy_F.png
…
Unityが大きいサイズのデータからリストアップしてくれている。
これらで使っていないテクスチャの削減もしくはテクスチャの
圧縮設定をすることで容量が更に減少するはずだ。
例えば以下のデータは白黒のデータである。
4.0 mb 0.7% Assets/_SpaceRace/Arts/smog.png
RGB24bitでデータを保存しているが、実はR値しか使っていない。
こういうものに関しては、R8にすれば24bitが8bitに収まるので1.3MB程度まで削減される。
更に、1024×1024のテクスチャだったが、実機で512×512で表示しても問題ないようなので
更にそこから1/4まで圧縮され340kほどになった。
また、あれ、これって参照してなくない?なんで入ってるの?
というのは削除していってしまおう。
このようなことを積み重ね容量を削減していこう。
試しに70%あったテクスチャの削除を重点的に行なった結果、apkは以下のサイズになった。
dangerzone.apk 117.5 MB
Uncompressed usage by category (Percentages based on user generated assets only):
Textures 22.7 mb 49.4%
Meshes 864.2 kb 1.8%
Animations 179.4 kb 0.4%
Sounds 2.3 mb 5.0%
Shaders 1.3 mb 2.9%
Other Assets 2.7 mb 5.9%
Levels 256.1 kb 0.5%
Scripts 4.9 mb 10.7%
Included DLLs 9.3 mb 20.2%
File headers 1.4 mb 3.1%
Total User Assets 45.9 mb 100.0%
Complete build size 475.6 mb
Used Assets and files from the Resources folder, sorted by uncompressed size:
2.2 mb 0.5% Assets/_SpaceRace/Sounds/bgm/Runners_High.mp3
1.3 mb 0.3% Assets/SpaceShipPack/Textures/Pixel Make Voyager/02_CockpitExtension/02_CockpitExtension_Specular.png
1.3 mb 0.3% Assets/_SpaceRace/Arts/honeycomb_w_cloud.png
1.0 mb 0.2% Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset
1.0 mb 0.2% Assets/Fonts/space-age.asset
1.0 mb 0.2% Built-in Texture2D: sactx-1024×1024-ETC2-UIAtlas-d5aaf7ac
808.9 kb 0.2% Resources/unity_builtin_extra
…
テクスチャが35MBほど削除されたことが分かる。
アプリサイズが100MBオーバーだが、32bit,64bit,x86のバイナリを同梱させているからだと思う。
x86端末なんてあまりないし32bitもそろそろ終わりそうだが
DLするユーザは多いほうが望ましいのと、実際にDLする場合のアプリサイズ制限が100MBなので
この辺りは1/3(32bit,64bit,x86)で割った値が大体なサイズ、という認識でいいだろう。