Compartir a través de


Entorno de Xamarin.Android

Entorno de ejecución

El entorno de ejecución es el conjunto de variables de entorno y las propiedades del sistema de Android que influyen en la ejecución del programa. Las propiedades del sistema de Android se pueden establecer con el comando adb shell setprop, mientras que las variables de entorno se pueden establecer mediante la propiedad del sistema 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'"

Las propiedades del sistema de Android se establecen para todos los procesos del dispositivo de destino.

A partir de Xamarin.Android 4.6, las propiedades del sistema y las variables de entorno se pueden establecer o invalidar por cada aplicación agregando un archivo de entorno al proyecto. Un archivo de entorno es un archivo de texto sin formato Unix con una acción de compilación de AndroidEnvironment. El archivo de entorno contiene líneas con el formato clave=valor. Los comentarios son líneas que comienzan por #. Se omiten las líneas en blanco.

Si la clave comienza con una letra mayúscula, entonces se trata como una variable de entorno y setenv(3) se usa para establecer la variable de entorno en el valor especificado durante el inicio del proceso.

Si la clave comienza con una letra minúscula, la clave se trata como una propiedad del sistema de Android y el valor es el valor predeterminado: las propiedades del sistema de Android que controlan el comportamiento de ejecución de Xamarin.Android se buscan primero desde el almacén de propiedades del sistema de Android y, si no existe ningún valor, se usa el valor especificado en el archivo de entorno. El objetivo es permitir que se use adb shell setprop para invalidar los valores que proceden del archivo de entorno con fines de diagnóstico.

Variables de entorno de Xamarin.Android

Xamarin.Android admite la variable XA_HTTP_CLIENT_HANDLER_TYPE, que se puede establecer mediante adb shell setprop debug.mono.env o por medio de la acción de compilación $(AndroidEnvironment).

XA_HTTP_CLIENT_HANDLER_TYPE

El tipo completo de ensamblado que debe heredar de HttpMessageHandler y que se construye a partir de la construcción predeterminadaHttpClient().

En Xamarin.Android 6.1, esta variable de entorno no se establece de forma predeterminada, y se usa HttpClientHandler.

Como alternativa, puede especificarse el valor Xamarin.Android.Net.AndroidClientHandler para usar java.net.URLConnection para el acceso a la red, que puede permitir el uso de TLS 1.2 cuando Android lo admita.

Agregado en Xamarin.Android 6.1.

Propiedades del sistema de Xamarin.Android

Xamarin.Android admite las siguientes propiedades del sistema, que se pueden establecer mediante adb shell setprop o por medio de la acción de compilación $(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

El valor de la propiedad del sistema debug.mono.debug es un entero. Si 1, se comporta "como si" el proceso se hubiera iniciado con mono --debug. Por lo general, se muestra la información de archivo y línea en seguimientos de pila, etc., sin necesidad de que la aplicación se inicie desde un depurador.

debug.mono.env

Contiene una lista de variables de entorno separada por |.

debug.mono.gc

El valor de la propiedad del sistema debug.mono.gc es un entero. Si 1, se debe registrar entonces la información de GC.

Esto equivale a hacer que la propiedad del sistema debug.mono.log contenga gc.

debug.mono.log

Controla qué información adicional registrará Xamarin.Android en adb logcat. Es una cadena separada por comas (,), que contiene uno de los siguientes valores:

  • all: se imprimen todos los mensajes. En raras ocasiones es una buena idea, ya que incluye mensajes lref.
  • assembly: se imprime .apk y se ensamblan los mensajes de análisis.
  • gc: se imprimen los mensajes relacionados con GC.
  • gref: se imprimen los mensajes de referencia global de JNI.
  • lref: se imprimen los mensajes de referencia local de JNI.

    Nota:

    Este valor en realidad enviará correo basura a adb logcat. En Xamarin.Android 5.1, también creará un archivo .__override__/lrefs.txt, que puede volverse gigantesco. Evitar.

  • timing: imprimir alguna información de tiempo de método. Este valor también creará los archivos .__override__/methods.txt y .__override__/counters.txt.

debug.mono.max_grefc

El valor de la propiedad del sistema debug.mono.max_grefc es un entero. Su valor invalida el recuento de GREF máximo detectado para el dispositivo de destino.

Nota: Solo se puede usar con adb shell setprop debug.mono.max_grefc ya que el valor no estará disponible a tiempo con un archivo environment.txt.

debug.mono.profile

La propiedad del sistema debug.mono.profile habilita el generador de perfiles. Es equivalente a la opción mono --profile, y utiliza sus mismos valores. (Para más información, consulte la página man mono(1)).

debug.mono.runtime_args

La propiedad del sistema debug.mono.runtime_args contiene opciones adicionales que se deben analizar mediante mono.

debug.mono.trace

La propiedad del sistema debug.mono.trace permite el seguimiento. Es equivalente a la opción mono --trace, y utiliza sus mismos valores. (Para más información, consulte la página man mono(1)).

En general, no la utilice. El uso de seguimiento enviará correo basura a la salida de adb logcat, ralentizará gravemente el comportamiento del programa y modificará su comportamiento (hasta agregar condiciones de errores adicionales).

Sin embargo, en ocasiones, permite realizar cierta investigación adicional...

debug.mono.wref

La propiedad del sistema debug.mono.wref permite invalidar el mecanismo de referencia débil de JNI detectado predeterminado. Hay dos valores admitidos:

  • jni: se usan referencias débiles de JNI, creadas por JNIEnv::NewWeakGlobalRef() y destruidas por JNIEnv::DeleteWeakGlobalREf().
  • java: usan referencias globales de JNI con instancias java.lang.WeakReference de referencia.

De forma predeterminada, se usa java, hasta API-7 y en API-19 (Kit Kat) con ART habilitado. (API-8 agregó referencias de jni y referencias jni de interrupción de ART).

Esta propiedad del sistema es útil para pruebas y determinadas formas de investigación. En general, no se debe cambiar.

XA_HTTP_CLIENT_HANDLER_TYPE

Introducida primero en Xamarin.Android 6.1, esta variable de entorno declara la implementación de HttpMessageHandler predeterminada que usará HttpClient. Esta variable no se establece de forma predeterminada, y Xamarin.Android usará HttpClientHandler.

XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler

Nota:

El dispositivo Android subyacente debe admitir TLS 1.2. Android 5.0 y versiones posteriores admiten TLS 1.2

Ejemplo

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