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 开始,可能会在每个应用的基础上设置或重写系统属性和环境变量,方法是将环境文件添加到项目。 环境文件是 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.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
文件,从中获取 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=