Environnement de Xamarin.Android

Environnement d’exécution

L’environnement d’exécution correspond à l’ensemble de variables d’environnement et de propriétés système Android qui influencent l’exécution du programme. Les propriétés système Android peuvent être définies avec la commande adb shell setprop, tandis que les variables d’environnement peuvent être définies en définissant la propriété systèm 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'"

les propriétés système Android sont définies pour tous les processus sur l’appareil cible.

À partir de Xamarin.Android 4.6, les propriétés système et les variables d’environnement peuvent être définies ou remplacées pour chaque application en ajoutant un fichier d’environnement au projet. Un fichier d’environnement est un fichier texte brut au format Unix avec une action de génération de AndroidEnvironment. Le fichier d’environnement contient des lignes avec le format key=value. Les commentaires sont des lignes qui commencent par #. Les lignes vides sont ignorées.

Si clé commence par une lettre majuscule, clé est traité comme une variable d’environnement, et setenv(3) est utilisée pour définir la variable d’environnement pour la valeur spécifiée lors du démarrage du processus.

Si la clé commence par une lettre en minuscules, la clé est alors traitée comme une propriété système Android et la valeur est la valeur par défaut : les propriétés système Android qui contrôlent le comportement d’exécution de Xamarin.Android sont d’abord recherchées à partir du magasin de propriétés système Android et, si aucune valeur n’est trouvée, la valeur spécifiée dans le fichier d’environnement est utilisée. Ceci permet d’autoriser l’utilisation de adb shell setprop pour remplacer des valeurs qui proviennent du fichier d’environnement afin d’établir un diagnostic.

Variables d’environnement Xamarin.Android

Xamarin.Android prend en charge la variable XA_HTTP_CLIENT_HANDLER_TYPE, qui peut être définie via adb shell setprop debug.mono.env ou via l’action de génération $(AndroidEnvironment).

XA_HTTP_CLIENT_HANDLER_TYPE

Le type qualifié d’assembly qui doit hériter de HttpMessageHandler est construit à partir du HttpClient() constructeur par défaut.

Dans Xamarin.Android 6.1, cette variable d’environnement n’est pas définie par défaut, et HttpClientHandler sera utilisée.

Vous pouvez également spécifier la valeur Xamarin.Android.Net.AndroidClientHandler pour utiliser java.net.URLConnection pour l’accès réseau, qui peut autoriser l’utilisation de TLS 1.2 quand Android le prend en charge.

Ajouté dans Xamarin.Android 6.1.

Propriétés système de Xamarin.Android

Xamarin.Android prend en charge les propriétés système suivantes, qui peuvent être définies via adb shell setprop ou via l’action de génération $(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

La valeur de la propriété système debug.mono.debug est un entier. Si c’est 1, comportez-vous « comme si » le processus avait été démarré avec mono --debug. Généralement, des informations de fichier et de ligne dans l’arborescence des appels de procédure, etc., s’affichent sans nécessiter que l’application soit lancée à partir d’un débogueur.

debug.mono.env

Contient une liste des variables d’environnement séparées par un |.

debug.mono.gc

La valeur de la propriété système debug.mono.gc est un entier. Si c’est 1, les informations GC doivent être journalisées.

Ceci équivaut à ce que la propriété système debug.mono.log contienne gc.

debug.mono.log

Contrôle les informations supplémentaires que Xamarin.Android enregistrera dans adb logcat. Il s’agit d’une chaîne séparée par des virgules (,), qui contient l’une des valeurs suivantes :

  • all : imprimer tous les messages. C’est rarement une bonne idée, car cela inclut les messages lref.
  • assembly : imprimer .apk et les messages analyse d’assembly.
  • gc : imprimer les messages associés au GC.
  • gref : imprimer les messages de référence globale de JNI.
  • lref : imprimer les messages de référence locale de JNI.

    Notes

    ceci spammera vraimentadb logcat. Dans Xamarin.Android 5.1, ceci créera également un fichier .__override__/lrefs.txt, qui peut être énorme. Éviter.

  • timing : imprimer des informations de minutage de méthode. Cette opération créera également les fichiers .__override__/methods.txt et .__override__/counters.txt.

debug.mono.max_grefc

La valeur de la propriété système debug.mono.max_grefc est un entier. Elle remplace le nombre GREF maximal par défaut détecté pour l’appareil cible.

Remarque : c’est utilisable uniquement avec adb shell setprop debug.mono.max_grefc, étant donné que la valeur ne sera pas disponible à temps avec un fichier environment.txt.

debug.mono.profile

La propriété système debug.mono.profile active le profileur. Elle est équivalente à l’option mono --profile et utilise les mêmes valeurs. (Pour plus d’informations, consultez la page man mono(1).)

debug.mono.runtime_args

La propriété système debug.mono.runtime_args contient des options supplémentaires qui devraient être analysées par mono.

debug.mono.trace

La propriété système debug.mono.trace active le traçage. Elle est équivalente à l’option mono --trace et utilise les mêmes valeurs. (Pour plus d’informations, consultez la page man mono(1).)

D’une manière générale, n’utilisez pas. L’utilisation du traçage spammera la sortie adb logcat, ralentira considérablement et modifiera le comportement du programme (y compris l’ajout de conditions d’erreur).

Cependant, elle permet parfois d’effectuer des recherches supplémentaires...

debug.mono.wref

La propriété système debug.mono.wref permet de remplacer le mécanisme à faible référence JNI par défaut détecté. Deux valeurs sont prises en charge :

  • jni : utilisez les références faibles JNI créées par JNIEnv::NewWeakGlobalRef() et détruites par JNIEnv::DeleteWeakGlobalREf().
  • java: utilisez des références JNI Global qui référencent java.lang.WeakReference des instances.

java est utilisé, par défaut, jusqu'à l’API-7 et sur l’API-19 (Kit Kat) où ART est activé. (Références ajoutées jni à l’API 8 et références art rompuesjni .)

Cette propriété système est utile pour tester et pour certaines formes d’examens. En général, elle ne doit pas être modifiée.

XA_HTTP_CLIENT_HANDLER_TYPE

Tout d’abord introduite dans Xamarin.Android 6.1, cette variable d’environnement déclare l’implémentation de HttpMessageHandler par défaut qui sera utilisée par le HttpClient. Par défaut, cette variable n’est pas définie, et Xamarin.Android utilisera le HttpClientHandler.

XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler

Notes

L’appareil Android sous-jacent doit prendre en charge TLS 1.2. Android 5.0 et les versions ultérieures prennent en charge TLS 1.2

Exemple

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