执行环境
执行环境是一系列影响程序执行的环境变量和 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 开始,可能会在每个应用的基础上设置或重写系统属性和环境变量,方法是将环境文件添加到项目。 环境文件是 Unix 格式的纯文本文件,附带 AndroidEnvironment 的生成操作。
环境文件包含键=值格式的行。
注释是以 # 开头的行。 将忽略空行。
如果密钥以大写字母开头,密钥将被视为一个环境变量,且 setenv(3) 用于在进程启动过程中将环境变量设置为指定值。
如果密钥以小写字母开头,则密钥会被视为 Android 系统属性,且值为默认值:首先从 Android 系统属性存储查找控制 Xamarin.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 进行网络访问,该操作可允许使用 TLS 1.2(在获得 Android 支持的情况下)。
已在 Xamarin.Android 6.1 中添加。
Xamarin.Android 系统属性
Xamarin.Android 支持以下系统属性,可通过 adb shell setprop 或 $(AndroidEnvironment) 生成操作进行设置。
debug.mono.debugdebug.mono.envdebug.mono.gcdebug.mono.logdebug.mono.max_grefcdebug.mono.profiledebug.mono.runtime_argsdebug.mono.tracedebug.mono.wrefXA_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文件,从中获取 gigantic。 避免。timing:打印某些方法计时信息。 这还将创建文件.__override__/methods.txt和.__override__/counters.txt。
debug.mono.max_grefc
debug.mono.max_grefc 系统属性的值是一个整数。
其值会重写默认检测到的目标设备的最大 GREF 计数。
注意:这只能与 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 全局引用。
默认情况下使用 java,通过 API 7 和 API-19 (Kit Katt) 启用,同时启用 ART。 (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=