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=