CPU アーキテクチャ

Xamarin.Android では、32 ビットおよび 64 ビット デバイスなど、いくつかの CPU アーキテクチャがサポートされています。 この記事では、Android でサポートされている 1 つ以上の CPU アーキテクチャをアプリのターゲットにする方法について説明します。

CPU アーキテクチャの概要

リリース用にアプリを準備する場合は、アプリでサポートされるプラットフォーム CPU アーキテクチャを指定する必要があります。 1 つの APK に、複数の異なるアーキテクチャをサポートするためのマシン コードを含めることができます。 アーキテクチャ固有のコードの各コレクションは、アプリケーション バイナリ インターフェイス (ABI) に関連付けられています。 各 ABI は、このマシン コードが実行時に Android と対話する方法を定義します。 このしくみに関する詳細については、「マルチコア デバイスと Xamarin.Android」を参照してください。

サポートされているアーキテクチャを指定する方法

通常、アプリがリリース用に構成されている場合は、アーキテクチャ (または複数のアーキテクチャ) を明示的に選択します。 アプリがデバッグ用に構成されている場合、[共有ランタイムの使用] オプションと [高速デプロイの使用] オプションが有効になり、明示的なアーキテクチャの選択が無効になります。

Visual Studio で、ソリューション エクスプローラーのプロジェクトを右クリックし、[プロパティ] を選択します。 [Android オプション] ページで、[パッケージング プロパティ] セクションを確認し、[共有ランタイムの使用] が無効になっていることを確認します (これをオフにすると、サポートする ABI を明示的に選択できます)。 [詳細設定] ボタンをクリックし、[サポートされているアーキテクチャ] でサポートするアーキテクチャをチェックします。

Selecting armeabi and armeabi-v7a

Xamarin.Android では、次のアーキテクチャがサポートされています。

  • armeabi – 最低限 ARMv5TE 命令セットをサポートする ARM ベースの CPU。 armeabi はスレッド セーフではないため、マルチ CPU デバイスでは使用しないでください。

Note

Xamarin.Android 9.2 以降、armeabi はサポート対象から除外されました。

  • armeabi-v7a – ハードウェアの浮動小数点演算と複数の CPU (SMP) デバイスを備えた ARM ベースの CPU。 armeabi-v7a マシン コードは、ARMv5 デバイスでは実行できないことに注意してください。

  • arm64-v8a – 64 ビット ARMv8 アーキテクチャに基づく CPU。

  • x86 – x86 (または IA-32) 命令セットをサポートする CPU。 この命令セットは、MMX、S SSE、SSE2、SSE3 命令を含む Pentium Pro の命令セットと同じです。

  • x86_64 64 ビット x86 (x64 および AMD64 とも呼ばれます) 命令セットをサポートする CPU。

Xamarin.Android の既定値は、リリース ビルドの armeabi-v7a です。 この設定では、armeabi よりも大幅に優れたパフォーマンスが得られます。 64 ビット ARM プラットフォーム (Nexus 9 など) をターゲットとしている場合は、arm64-v8a を選択します。 アプリを x86 デバイスにデプロイする場合は、x86 を選択します。 ターゲット x86 デバイスが 64 ビット CPU アーキテクチャを使用している場合は、x86_64 を選択します。

複数のプラットフォームを対象とする

複数の CPU アーキテクチャを対象にするには、複数の ABI を選択できます (APK ファイル サイズが大きくなる場合があります)。 サポートされているアーキテクチャごとに個別の APK を作成するために、「選択した ABI ごとに 1 つのパッケージ (.APK) を生成する」オプション (「パッケージング プロパティを設定する」に記載) を使用できます。

64 ビット デバイスを対象にするために arm64-v8a または x86_64 を選択する必要はありません。ここでは、64 ビット ハードウェアでアプリを実行するために 64 ビットのサポートは必要ありません。 たとえば、64 ビット ARM デバイス (Nexus 9 など) では、armeabi-v7a 用に構成されたアプリを実行できます。 64 ビット サポートを有効にする主な利点は、アプリがより多くのメモリに対処できるようにすることです。

Note

2018 年 8 月から、新しいアプリは API レベル 26 をターゲットにすることが必須となります。また、2019 年 8 月から、アプリは 32 ビット バージョンに加えて 64 ビット バージョンを提供することが必須となります

追加情報

状況によっては、アーキテクチャごとに個別の APK を作成する必要がある場合があります (APK のサイズを小さくするため、またはアプリに特定の CPU アーキテクチャに固有の共有ライブラリがあるため)。 この方法の詳細については、「ABI 固有の API の構築」を参照してください。