アプリケーション パッケージのサイズ

この記事では Xamarin.Android アプリケーション パッケージの構成部分と、開発のデバッグおよびリリース段階で効果的なパッケージ開発を行うために使用できる関連戦略について検証します。

概要

Xamarin.Android では、効果的なデバッグおよびリリース配置プロセスを維持しながら、さまざまなメカニズムを使用してパッケージ サイズを最小化します。 この記事では、Xamarin.Android のリリースおよびデバッグ配置ワークフローと、Xamarin.Android プラットフォームでどのように小さいアプリケーション パッケージをビルドしてリリースできるかを確認します。

リリース パッケージ

完全なアプリケーションを出荷するには、パッケージにアプリケーション、関連ライブラリ、コンテンツ、Mono ランタイム、および必要な基本クラス ライブラリ (BCL) のアセンブリを含める必要があります。 たとえば、既定の "Hello World" テンプレートを使用する場合、完全なパッケージ ビルドのコンテンツは次のようになります。

Package size before linker

15.8 MB は、必要なサイズより大きなダウンロード サイズです。 問題は BCL ライブラリです。このライブラリには mscorlib、System、および Mono.Android が含まれており、アプリケーションを実行するために必要な多くのコンポーネントが提供されます。 ただし、アプリケーションで使用しない可能性のある機能も提供されるため、これらのコンポーネントを除外することをお勧めします。

配布用のアプリケーションをビルドする際に、リンクとして知られるプロセスを実行します。このプロセスでは、アプリケーションを調べ、直接使用されていないコードを削除します。 このプロセスは、ガベージ コレクションでヒープ割り当てメモリのために提供される機能に似ています。 ただし、リンクは、オブジェクトではなく、コードに対して動作します。 たとえば、System.dll にはメールを送受信するための名前空間全体が存在しますが、アプリケーションでこの機能を利用しない場合、そのコードはスペースを浪費するだけです。 Hello World アプリケーションでリンカーを実行すると、パッケージは次のようになります。

Package size after linker

ご覧のとおり、使用されていなかったかなりの量の BCL が削除されています。 最終的な BCL のサイズは、アプリケーションで実際に使用される内容によって異なることに注意してください。 たとえば、ApiDemo というより重要なサンプル アプリケーションを見ると、ApiDemo では Hello, World の場合より多くの BCL を使用するため、BCL コンポーネントのサイズが増えていることがわかります。

ApiDemo package size after linking

ここに示すとおり、アプリケーション パッケージのサイズは一般的に約 2.9 MB で、アプリケーションとその依存関係より大きくなります。

デバッグ パッケージ

デバッグ ビルドに応じて処理内容は少し異なります。 デバイスに繰り返し再配置する場合、アプリケーションをできるだけ高速にする必要があります。そのため、サイズではなく、配置速度を考慮してデバッグ パッケージを最適化します。

Android でのパッケージのコピーとインストールは比較的低速です。そのため、パッケージ サイズをできるだけ小さくする必要があります。 前述のとおり、パッケージ サイズを最小化する 1 つの方法として、リンカーの使用が考えられます。 ただし、リンクは低速であり、一般的には、最後の配置以降に変更されたアプリケーションの部分のみを配置する必要があります。 そのため、Xamarin.Android のコア コンポーネントからアプリケーションを分離します。

デバイスでの初回デバッグ時に、共有ランタイムおよび共有プラットフォームという 2 つの大きなパッケージをコピーします。 共有ランタイムには Mono ランタイムと BCL が含まれています。一方、共有プラットフォームには Android API レベル固有のアセンブリが含まれています。

Shared runtime package size

これらのコア コンポーネントのコピーは一度だけ行われます。かなりの時間がかかりますが、デバッグ モードで実行される後続のアプリケーションで利用できます。 最後に、小さくて時間がかからない実際のアプリケーションをコピーします。

The actual application is small

迅速なアセンブリの配置

迅速なアセンブリの配置 ビルド オプションを使用することで、アプリケーションのパッケージにアセンブリを含めず、デバイスに一度だけ直接アセンブリをインストールし、最後の配置以降に変更されたファイルをコピーするだけで、デバッグ インストール パッケージのサイズをさらに小さくすることができます。

迅速なアセンブリの配置を有効にするには、次の操作を行います。

  1. ソリューション エクスプローラーで Android プロジェクトを右クリックして、[オプション] を選択します。

  2. [プロジェクト オプション] ダイアログから、[Android のビルド] を選択します。

    Project Options Android Build

  3. 次のように、[共有 Mono ランタイムを使用] および [迅速なアセンブリの配置] チェック ボックスをオンにします。

    Checkboxes selected under Packaging tab

  4. [OK] ボタンをクリックして変更内容を保存し、[プロジェクト オプション] ダイアログを閉じます。

デバッグ用のアプリケーションの次回のビルド時に、アセンブリがデバイスに直接インストールされ (まだインストールされていない場合)、(アセンブリを含まない) より小さなアプリケーション パッケージがデバイスにインストールされます。 これで、テスト用に稼働中のアプリケーションを変更するためにかかる時間が短縮されます。

共有ランタイムと共有プラットフォームの初回の配置には長い時間がかかりますが、それを我慢すれば、アプリケーションを変更するたびに、新しいバージョンをすばやく簡単に配置できるため、変更/配置/実行サイクルが速くなります。

まとめ

この記事では、Xamarin.Android のリリースおよびデバッグ プロファイルのパッケージ化について確認しました。 さらに、開発のデバッグおよびリリース段階での効果的なパッケージ配置を容易にするために Mono for Android プラットフォームで使用する戦略を確認しました。