共用方式為


Xamarin.Android 環境

執行環境

執行環境是一組環境變數及 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 格式純文字檔案。 環境檔案包含以此格式撰寫的行:key=value。 註解是開頭為 # 的行。 空白行會遭到忽略。

key 的開頭為大寫字元,則 key 便會作為環境變數處理,而 setenv(3) 則是用於在處理序啟動時將環境變數設為指定的 value

key 的開頭為小寫字元,則 key 便會作為 Android 系統屬性來處理,其 value預設值:控制 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 系統屬性的值為一個整數。 它的值會「覆寫」針對目標裝置預設偵測到的最大 GRF 計數。

注意:這僅在使用 adb shell setprop debug.mono.max_grefc 時可用,因為該值在使用 environment.txt 檔案時將無法及時可用。

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 弱式參考機制。 有兩個支援的值:

  • jni:使用 JNI 弱式參考,由 JNIEnv::NewWeakGlobalRef() 建立並由 JNIEnv::DeleteWeakGlobalREf() 終結。
  • java:使用參考實例的 java.lang.WeakReference JNI 全域參考。

直到 API-7 及啟用 ART 的 API-19 (Kit Kat) 都會預設使用 java。 (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=