Среда 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
, то сведения о сборке мусора будут вноситься в журнал.
Это эквивалентно наличию системного свойства debug.mono.log
со значением gc
.
debug.mono.log
Устанавливает, какие дополнительные сведения Xamarin.Android будет записывать в adb logcat
.
Представляет собой строку с запятыми (,
) в качестве разделителей, составленную из комбинации следующих значений:
all
: вывод всех сообщений. Такой вариант нужен редко, так как он включает даже сообщенияlref
.assembly
: вывод.apk
и сообщений о синтаксическом анализе сборки.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, установленное по умолчанию для целевого устройства.
Обратите внимание: этот вариант можно указать только в 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
: используйте глобальные ссылки JNI, которые ссылаютjava.lang.WeakReference
экземпляры.
По умолчанию java
применяется в версиях до API-7 и в API 19 (Kit Kat) с включенным режимом ART. (В API-8 добавлены ссылки jni
, а режим ART нарушал работу ссылок jni
.)
Это системное свойство удобно для тестирования и определенных исследований. Обычно его не нужно изменять.
XA_HTTP_CLIENT_HANDLER_TYPE
Эта переменная среды, которая появилась в версии Xamarin.Android 6.1, объявляет реализацию HttpMessageHandler
по умолчанию, которая будет использоваться для HttpClient
. По умолчанию эта переменная не задана и Xamarin.Android использует HttpClientHandler
.
XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
Примечание.
Базовое устройство Android должно поддерживать протокол TLS 1.2. TLS 1.2 поддерживается во всех версиях Android начиная с 5.0.
Пример
## 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=