Xamarin.Android で作成した apk パッケージサイズについて、エントリーを分けます。
以下、Application Package Sizes | Xamarin の参考訳です。
リリースパッケージ
Mono ランタイムなどを含む Xamarin のアプリはアプリケーションサイズが大きくなります。そのため、使用していない機能を削除したライブラリを組み込む機能があります。
完全なアプリケーションを出荷するために、パッケージにはアプリケーション、関連ライブラリ、コンテンツ、Mono ランタイム、および必要な基本クラスライブラリ(BCL)のアセンブリを含める必要があります。ここではデフォルトの "Hello World" のテンプレートでは、完全なパッケージのビルドの内容は、次のようになります。
15.8 MB は、我々が望むよりも大きなダウンロードサイズです。問題は、アプリケーションを実行するのに必要なコンポーネントの多くを提供する mscorlib、system、Mono.Android などを含む BCL のライブラリです。しかし、これらはアプリケーションで使用していない機能を提供しているため、これらの構成要素を除外することができます。
私たちは配布用のアプリケーションをビルドするときにアプリケーションを検査し、直接使用されていない任意のコードを削除するリンクプロセスを実行します。このプロセスは、ガベージコレクションに似ています。オブジェクト上で動作する代わりにリンクがあなたのコードで動作します。例えば電子メールを送受信するためのSystem.dll 全体の名前空間がありますが、あなたのアプリケーションでこの機能を利用していない場合はコードだけのスペースを無駄にしています。Hello World アプリケーションでリンカを実行した後、パッケージには次のようになります。
ここで分かるように、使用されていない BCL のかなりの量を削除します。最終的な BCL のサイズはアプリケーションが実際に使用するものに依存していることに注意してください。ApiDemo と呼ばれるより実質的なサンプルアプリケーションを見た場合、ApiDemo は Hello World よりも BCL の多くを使用しているため、BCL、コンポーネントのサイズが増加していることがわかります。
ここのようにアプリケーションのパッケージサイズは、一般的にアプリケーションとその依存関係により約 2.9 MB以上になります。
デバッグパッケージ
初回デバッグ時にデバッグ用の共有ランタイム、共有プラットフォームを丸っとコピーして、次回以降のデバッグ転送を凄く速くする FastDev という仕組みがあります。
初めてデバイス上でデバッグを行う際に、共有ランタイムおよび共有プラットフォームと呼ばれる二つの大きなパッケージをコピーします。共有ランタイムには Mono ランタイムと BCL が含まれており、共有プラットフォームには、Android API レベル固有のアセンブリが含まれています。
これらのコンポーネントのコピーはかなりの時間がかかりますが1度だけ行われ、デバッグモードで実行されている後続のアプリケーションがこれらを利用することができます。最後に、小さくて速い、実際のアプリケーションをコピーします。