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는 환경 변수로 취급되며, 프로세스 시작 시 지정된 value로 환경 변수를 설정하기 위해 setenv(3)가 사용됩니다.

key가 소문자로 시작하는 경우 key가 Android 시스템 속성으로 취급되고 valuedefault value가 됩니다. Android 시스템 속성 저장소에서 Xamarin.Android 실행 동작을 제어하는 Android 시스템 속성이 먼저 조회되고, 값이 없을 경우 환경 파일에 지정된 값이 사용됩니다. 이는 진단을 위해 환경 파일에서 제공되는 값을 재정의할 때 adb shell setprop를 사용하도록 허용하기 위한 것입니다.

Xamarin.Android 환경 변수

Xamarin.Android는 adb shell setprop debug.mono.env 또는 $(AndroidEnvironment) 빌드 동작을 통해 설정할 수 있는 XA_HTTP_CLIENT_HANDLER_TYPE 변수를 지원합니다.

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에서는 gigantic.Avoid를 받을 수 있는 .__override__/lrefs.txt 파일도 방지.

  • timing: 일부 메서드 타이밍 정보를 인쇄합니다. 이는 또한 .__override__/methods.txt.__override__/counters.txt 파일도 만듭니다.

debug.mono.max_grefc

debug.mono.max_grefc 시스템 속성의 값은 정수입니다. 이 값은 대상 디바이스에 대해 기본으로 검색된 최대 GREF 수를 재정의합니다.

참고: 이 값은 조만간 environment.txt 파일과 함께 사용할 수 없게 되므로 adb shell setprop debug.mono.max_grefc와만 함께 사용할 수 있습니다.

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: JNIEnv::NewWeakGlobalRef()에서 만들고 JNIEnv::DeleteWeakGlobalREf()에서 파괴하는 JNI 약한 참조를 사용합니다.
  • java: 인스턴스를 참조 java.lang.WeakReference 하는 JNI 전역 참조를 사용합니다.

API-7 이하와 API-19(Kit Kat)에서는 ART가 활성화된 경우 기본적으로 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=