Xamarin.Android Environment

実行環境

実行環境 は、プログラムの実行に影響を与える一連の環境変数と Android のシステム プロパティです。 Android のシステム プロパティは adb shell setprop コマンドで設定できますが、環境変数を設定するには debug.mono.env システム プロパティを設定します。

## Enable GREF logging
adb shell setprop debug.mono.log gref

## Set the MONO_LOG_LEVEL and MONO_LOG_MASK environment variables
## so that additional Mono messages will be written to `adb logcat`.
adb shell setprop debug.mono.env "'MONO_LOG_LEVEL=info|MONO_LOG_MASK=asm'"

Android システムのプロパティは、ターゲット デバイス上のすべてのプロセスに対して設定されます。

Xamarin.Android 4.6 以降、環境ファイル をプロジェクトに追加することで、アプリケーションごとにシステム プロパティと環境変数の両方を設定するか、オーバーライドすることができるようになりました。 環境ファイルは、AndroidEnvironmentビルド アクションを含む Unix 形式のプレーンテキスト ファイルです。 環境ファイルには、キー = 値形式の行が含まれています。 コメントは # で始まる行です。 空白行は無視されます。

キー が大文字で始まる場合、キー は環境変数として扱われます。setenv (3) は、プロセスの起動時に環境変数を指定されたに設定するために使用されます。

"キー" が小文字で始まる場合、"キー" は Android のシステム プロパティとして扱われます。"" は "既定値" です。Xamarin.Android の実行動作を制御する Android システムのプロパティは、まず Android システムのプロパティ ストアから検索され、値が存在しない場合は、環境ファイルに指定されている値が使用されます。 これは、診断のために、adb shell setprop を使用して環境ファイルの値をオーバーライドできるようにするためです。

Xamarin.Android の環境変数

Xamarin.Android は XA_HTTP_CLIENT_HANDLER_TYPE 変数をサポートしています。この変数は adb shell setprop debug.mono.env または $(AndroidEnvironment) ビルド アクションを介して設定できます。

XA_HTTP_CLIENT_HANDLER_TYPE

HttpMessageHandler から継承する必要があり、HttpClient() 既定コンストラクターから構築されるアセンブリ修飾型です。

Xamarin.Android 6.1 では、この環境変数は既定では設定されておらず、HttpClientHandler が使用されます。

または、値 Xamarin.Android.Net.AndroidClientHandler でネットワーク アクセスに を使用するよう指定できます。java.net.URLConnection ネットワーク アクセスの場合は、Android でサポートされている場合に TLS 1.2 の使用が許可 される場合があります

Xamarin.Android 6.1 で追加されました。

Xamarin.Android のシステム プロパティ

Xamarin.Android は以下のシステム プロパティをサポートしています。これらのシステム プロパティは、adb shell setprop または $(AndroidEnvironment) のビルド アクションによって設定できます。

  • debug.mono.debug
  • debug.mono.env
  • debug.mono.gc
  • debug.mono.log
  • debug.mono.max_grefc
  • debug.mono.profile
  • debug.mono.runtime_args
  • debug.mono.trace
  • debug.mono.wref
  • XA_HTTP_CLIENT_HANDLER_TYPE

debug.mono.debug

debug.mono.debug システム プロパティの値は整数です。 1 の場合は、プロセスが mono --debug で開始されたかのように動作します。 一般的に、これはスタック トレースなどのファイルと行の情報を示します。デバッガーからアプリケーションを起動する必要はありません。

debug.mono.env

環境変数が | で区切られた一覧が含まれています。

debug.mono.gc

debug.mono.gc システム プロパティの値は整数です。 1 の場合は、GC 情報がログに記録されます。

これは、debug.mono.log システム プロパティに gc が含まれている場合に相当します。

debug.mono.log

Xamarin.Android が adb logcat にログを記録する追加情報を制御します。 次のいずれかの値を含むコンマ区切りの文字列 (,) です。

  • all: すべての メッセージを出力します。 lref メッセージが含まれているので、あまりお勧めしません。
  • assembly: .apk を出力して、解析メッセージをアセンブリします。
  • gc: GC 関連のメッセージを出力します。
  • gref: JNI グローバル参照メッセージを出力します。
  • lref: JNI ローカル参照メッセージを出力します。

    注意

    これは実際にはスパム adb logcat になります。 Xamarin.Android 5.1 では、.__override__/lrefs.txt ファイルも作成され、巨大なサイズになる可能性があります。 そのため、お勧めしません。

  • timing: いくつかのメソッド タイミング情報を出力します。 この処理で、ファイル .__override__/methods.txt.__override__/counters.txt も作成されます。

debug.mono.max_grefc

debug.mono.max_grefc システム プロパティの値は整数です。 この値で、ターゲット デバイスの既定の検出された最大 GREF カウントがオーバーライドされます。

注:environment.txt ファイルで適時に値を取得できないので、adb shell setprop debug.mono.max_grefc でのみ使用できます。

debug.mono.profile

debug.mono.profile システム プロパティでプロファイラーが有効になります。 これは mono --profile オプションに相当し、同じ値を使用します (詳細については、mono(1) のマニュアル ページを参照してください)。

debug.mono.runtime_args

debug.mono.runtime_args システム プロパティには、mono で解析する必要がある追加オプションがあります。

debug.mono.trace

システム プロパティ debug.mono.trace でトレースが有効になります。 これは mono --trace オプションに相当し、同じ値を使用します (詳細については、mono(1) のマニュアル ページを参照してください)。

一般的には使用しないでください。 トレースを使用すると、スパム adb logcat が出力され、プログラムの動作が大幅に遅くなり、プログラムの動作が変わります (最大の変化でエラー条件の追加など)。

ただし、場合によっては、トレースを利用して何らかの追加調査を実行できることがあります。

debug.mono.wref

debug.mono.wref システム プロパティを使用すると、既定で検出された JNI の弱い参照メカニズムをオーバーライドすることができます。 サポートされている値は次の 2 つです。

  • jni: JNIEnv::NewWeakGlobalRef() で作成され、JNIEnv::DeleteWeakGlobalREf() によって破棄される JNI の弱い参照を使用します。
  • java: java.lang.WeakReference インスタンスを参照する JNI グローバル参照を使用します。

java は、既定では API-7 までと、ART が有効な場合は API-19 (Kit Kat) で使用されます (API-8 に参照が追加 jni され、ART によって参照が壊れましたjni )。

このシステム プロパティは、テストや特定の形式の調査に役立ちます。 一般的に、変更はお勧めしません。

XA_HTTP_CLIENT_HANDLER_TYPE

Xamarin.Android 6.1 で初めて導入されたこの環境変数では、HttpClient によって使用される既定の HttpMessageHandler 実装を宣言します。 既定では、この変数は設定されておらず、Xamarin.Android は HttpClientHandler を使用します。

XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler

注意

基になる Android デバイスが TLS 1.2 をサポートしている必要があります。 Android 5.0 以降では TLS 1.2 をサポートしています。

## Comments are lines which start with '#'
## Blank lines are ignored.

## Enable GREF messages to `adb logcat`
debug.mono.log=gref

## Clear out a Mono environment variable to decrease logging
MONO_LOG_LEVEL=