Xamarin.Android 환경Xamarin.Android Environment

실행 환경Execution Environment

실행 환경은 프로그램 실행에 영향을 주는 환경 변수와 Android 시스템 속성의 집합입니다.The execution environment is the set of environment variables and Android system properties that influence program execution. Android 시스템 속성은 adb shell setprop 명령으로 설정할 수 있지만 환경 변수는 debug.mono.env 시스템 속성을 지정하여 설정할 수 있습니다.Android system properties can be set with the adb shell setprop command, while environment variables can be set by setting the debug.mono.env system property:

## 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 시스템 속성은 대상 디바이스의 모든 프로세스에 대해 설정됩니다.Android system properties are set for all processes on the target device.

Xamarin.Android 4.6부터 시스템 속성 및 환경 변수는 모두 앱별로 프로젝트에 환경 파일을 추가하여 설정하거나 재정의할 수 있습니다.Starting with Xamarin.Android 4.6, both system properties and environment variables may be set or overridden on a per-app basis by adding an environment file to the project. 환경 파일은 AndroidEnvironment빌드 동작을 사용하는 Unix 형식의 일반 텍스트 파일입니다.An environment file is a Unix-formatted plain-text file with a Build action of AndroidEnvironment. 환경 파일에는 key=value 형식이 있는 줄이 포함됩니다.The environment file contains lines with the format key=value. 주석은 #으로 시작하는 줄입니다.Comments are lines which start with #. 빈 줄은 무시됩니다.Blank lines are ignored.

key가 대문자로 시작될 경우 key는 환경 변수로 취급되며, 프로세스 시작 시 지정된 value로 환경 변수를 설정하기 위해 setenv(3)가 사용됩니다.If key starts with an uppercase letter, then key is treated as an environment variable and setenv(3) is used to set the environment variable to the specified value during process startup.

‘key’가 소문자로 시작될 경우 ‘key’는 Android 시스템 속성으로 취급되며, ‘value’는 ‘default value’가 됩니다. Android 시스템 속성 저장소에서 Xamarin.Android 실행 동작을 제어하는 Android 시스템 속성이 먼저 조회되고, 값이 없을 경우 환경 파일에 지정된 값이 사용됩니다.If key starts with a lowercase letter, then key is treated as an Android system property and value is the default value: Android system properties which control Xamarin.Android execution behavior are looked up first from the Android system property store, and if no value is present then the value specified in the environment file is used. 이는 진단을 위해 환경 파일에서 제공되는 값을 재정의할 때 adb shell setprop를 사용하도록 허용하기 위한 것입니다.This is to permit adb shell setprop to be used to override values which come from the environment file for diagnostic purposes.

Xamarin.Android 환경 변수Xamarin.Android Environment Variables

Xamarin.Android는 adb shell setprop debug.mono.env 또는 $(AndroidEnvironment) 빌드 동작을 통해 설정할 수 있는 XA_HTTP_CLIENT_HANDLER_TYPE 변수를 지원합니다.Xamarin.Android supports the XA_HTTP_CLIENT_HANDLER_TYPE variable, which may be set either via adb shell setprop debug.mono.env or via the $(AndroidEnvironment) Build action.

XA_HTTP_CLIENT_HANDLER_TYPE

HttpMessageHandler에서 상속되어야 하며 HttpClient() 기본 생성자로 생성되는 어셈블리에 정규화된 형식.The assembly-qualified type which must inherit from HttpMessageHandler and is constructed from the HttpClient() default constructor.

Xamarin.Android 6.1에서는 이 환경 변수가 기본적으로 설정되지 않으며 HttpClientHandler가 사용됩니다.In Xamarin.Android 6.1, this environment variable is not set by default, and HttpClientHandler will be used.

또는 네트워크 액세스에 java.net.URLConnection을 사용하도록 Xamarin.Android.Net.AndroidClientHandler 값이 지정되어Alternatively, the value Xamarin.Android.Net.AndroidClientHandler may be specified to use java.net.URLConnection Android에서 지원하는 경우 TLS 1.2의 사용을 허용 수 있습니다.for network access, which may permit use of TLS 1.2 when Android supports it.

Xamarin.Android 6.1에 추가되었습니다.Added in Xamarin.Android 6.1.

Xamarin.Android 시스템 속성Xamarin.Android System Properties

Xamarin.Android는 adb shell setprop 또는 $(AndroidEnvironment) 빌드 동작을 통해 설정할 수 있는 다음과 같은 시스템 속성을 지원합니다.Xamarin.Android supports the following system properties, which may be set either via adb shell setprop or via the $(AndroidEnvironment) Build action.

  • 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 시스템 속성의 값은 정수입니다.The value of the debug.mono.debug system property is an integer. 1일 경우 프로세스가 mono --debug로 "시작된 것처럼" 동작합니다.If 1, then behave "as if" the process were started with mono --debug. 이는 일반적으로 디버거에서 앱을 시작하지 않아도 스택 추적 등에서 파일 및 줄 정보를 보여줍니다.This generally shows file and line information in stack traces, etc., without requiring that the app be started from a debugger.

debug.mono.env

|로 구분된 환경 변수 목록을 포함합니다.Contains a |-separated list of environment variables.

debug.mono.gc

debug.mono.debug 시스템 속성의 값은 정수입니다.The value of the debug.mono.debug system property is an integer. 1일 경우 GC 정보가 로깅됩니다.If 1, then GC information should be logged.

이는 debug.mono.log 시스템 속성이 gc를 포함하도록 하는 것과 동일합니다.This is equivalent to having the debug.mono.log system property contain gc.

debug.mono.log

Xamarin.Android가 adb logcat에 로깅할 추가 정보를 제어합니다.Controls which additional information Xamarin.Android will log to adb logcat. 쉼표로 구분된 문자열(,)이며, 다음 값 중 하나를 포함합니다.It is a comma-separated string (,), containing one of the following values:

  • all: ‘모든’ 메시지를 인쇄합니다. all: Print out all messages. 이는 lref 메시지를 포함하므로 좋은 방법이 아닙니다.This is seldom a good idea, as it includes lref messages.
  • assembly: .apk 및 어셈블리 구문 분석 메시지를 인쇄합니다.assembly: Print out .apk and assembly parsing messages.
  • gc: GC 관련 메시지를 인쇄합니다.gc: Print out GC-related messages.
  • gref: JNI 전역 참조 메시지를 인쇄합니다.gref: Print out JNI Global Reference messages.
  • lref: JNI 로컬 참조 메시지를 인쇄합니다.lref: Print out JNI Local Reference messages.

    참고

    이는 ‘실제로’ adb logcat을 스팸 처리합니다. This will really spam adb logcat. Xamarin.Android 5.1에서는 gigantic.Avoid를 받을 수 있는 .__override__/lrefs.txt 파일도In Xamarin.Android 5.1, this will also create a .__override__/lrefs.txt file, which can get gigantic. 만듭니다.Avoid.

  • timing: 일부 메서드 타이밍 정보를 인쇄합니다.timing: Print out some method timing information. 이는 또한 .__override__/methods.txt.__override__/counters.txt 파일도 만듭니다.This will also create the files .__override__/methods.txt and .__override__/counters.txt.

debug.mono.max_grefc

debug.mono.max_grefc 시스템 속성의 값은 정수입니다.The value of the debug.mono.max_grefc system property is an integer. 이 값은 대상 디바이스에 대해 기본으로 검색된 최대 GREF 수를 재정의합니다.It's value overrides the default detected maximum GREF count for the target device.

참고: 이 값은 조만간 environment.txt 파일과 함께 사용할 수 없게 되므로 adb shell setprop debug.mono.max_grefc와만 함께 사용할 수 있습니다.Please note: This is only usable with adb shell setprop debug.mono.max_grefc as the value will not be available in time with an environment.txt file.

debug.mono.profile

debug.mono.profile 시스템 속성은 프로파일러를 활성화합니다.The debug.mono.profile system property enables the profiler. mono --profile 옵션에 해당하며 이와 동일한 값을 사용합니다.It is equivalent to, and uses the same values as, the mono --profile option. (자세한 내용은 mono(1) 기본 페이지를 참조하세요.)(See the mono(1) man page for more information.)

debug.mono.runtime_args

debug.mono.runtime_args 시스템 속성에는 mono로 구문 분석해야 하는 추가 옵션이 있습니다.The debug.mono.runtime_args system property contains additional options that should be parsed by mono.

debug.mono.trace

debug.mono.trace 시스템 속성은 추적을 활성화합니다.The debug.mono.trace system property enables tracing. mono --trace 옵션에 해당하며 이와 동일한 값을 사용합니다.It is equivalent to, and uses the same values as, the mono --trace option. (자세한 내용은 mono(1) 기본 페이지를 참조하세요.)(See the mono(1) man page for more information.)

일반적으로 사용하지 않습니다.In general, do not use. 추적을 사용하면 adb logcat 출력이 스팸 처리되어 프로그램 동작 속도가 현저히 느려지고, 프로그램 동작이 변경됩니다(오류 조건이 추가될 수 있음).Use of tracing will spam adb logcat output, severaly slow down program behavior, and alter program behavior (up to and including adding additional error conditions).

하지만 경우에 따라 추가 조사를 수행할 수 있습니다.Sometimes, however, it allows some additional investigation to be performed...

debug.mono.wref

debug.mono.wref 시스템 속성을 사용하면 기본으로 검색된 JNI 약한 참조 메커니즘을 재정의할 수 있습니다.The debug.mono.wref system property allows overriding the default detected JNI Weak Reference mechanism. 지원되는 값은 두 가지가 있습니다.There are two supported values:

  • jni: JNIEnv::NewWeakGlobalRef()에서 만들고 JNIEnv::DeleteWeakGlobalREf()에서 파괴하는 JNI 약한 참조를 사용합니다.jni: Use JNI weak references, as created by JNIEnv::NewWeakGlobalRef() and destroyed by JNIEnv::DeleteWeakGlobalREf().
  • java: java.lang.WeakReference 인스턴스를 참조하는 JNI 전역 참조를 사용합니다.java: Use JNI Global references which reference java.lang.WeakReference instances.

API-7 이하와 API-19(Kit Kat)에서는 ART가 활성화된 경우 기본적으로 java가 사용됩니다.java is used, by default, up through API-7 and on API-19 (Kit Kat) with ART enabled. (API-8은 jni 참조를 추가했고, ART는 jni 참조를 중단했습니다.)(API-8 added jni references, and ART broke jni references.)

이 시스템 속성은 테스트와 특정 형태의 조사에 유용합니다.This system property is useful for testing and certain forms of investigation. 일반적으로 변경해서는 안 됩니다.In general, it should not be changed.

XA_HTTP_CLIENT_HANDLER_TYPEXA_HTTP_CLIENT_HANDLER_TYPE

Xamarin.Android 6.1에 처음 도입된 이 환경 변수는 HttpClient에서 사용할 기본 HttpMessageHandler 구현을 선언합니다.First introduced in Xamarin.Android 6.1, this environment variable declares the default HttpMessageHandler implementation that will be used by the HttpClient. 기본적으로 이 변수는 설정되지 않으며, Xamarin.Android는 HttpClientHandler를 사용합니다.By default this variable is not set, and Xamarin.Android will use the HttpClientHandler.

XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler

참고

기본 Android 디바이스가 TLS 1.2를 지원해야 합니다.The underlying Android device must support TLS 1.2. Android 5.0 이상은 TLS 1.2를 지원합니다.Android 5.0 and later support TLS 1.2

Example

## 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=