Condividi tramite


Ambiente Xamarin.Android

Ambiente di esecuzione

L'ambiente di esecuzione è il set di variabili di ambiente e di proprietà di sistema di Android che influenzano l'esecuzione del programma. Le proprietà di sistema di Android possono essere impostate con il comando adb shell setprop, le variabili di ambiente, invece, impostando la proprietà di 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'"

Le proprietà di sistema di Android vengono impostate per tutti i processi nel dispositivo di destinazione.

A partire da Xamarin.Android 4.6, sia le proprietà di sistema che le variabili di ambiente possono essere impostate o sostituite in base alle singole app aggiungendo un file di ambiente al progetto. Un file di ambiente è un file di testo normale in formato Unix con l'azione di compilazioneAndroidEnvironment. Il file dell'ambiente contiene righe nel formato chiave=valore. I commenti sono righe che iniziano con #. Le righe vuote vengono ignorate.

Se la chiave inizia con una lettera maiuscola, la chiave viene considerata una variabile di ambiente e viene usato setenv(3) per impostare la variabile di ambiente sul valore specificato durante l'avvio del processo.

Se la chiave inizia con una lettera minuscola, la chiave viene considerata una proprietà di sistema di Android e il valore è il valore predefinito: prima vengono cercate nell'archivio delle proprietà di sistema di Android le proprietà di sistema di Android che controllano il comportamento di esecuzione di Xamarin.Android e, se non sono presenti valori, viene usato il valore specificato nel file dell'ambiente. Lo scopo è quello di consentire l'uso di adb shell setprop per eseguire l'override dei valori ricavati dal file dell'ambiente a fini diagnostici.

Variabili di ambiente Xamarin.Android

Xamarin.Android supporta la variabile XA_HTTP_CLIENT_HANDLER_TYPE, che può essere impostata tramite adb shell setprop debug.mono.env o tramite l'azione di compilazione $(AndroidEnvironment).

XA_HTTP_CLIENT_HANDLER_TYPE

Tipo qualificato dall'assembly che deve ereditare da HttpMessageHandler e viene creato dal costruttore predefinito HttpClient().

Per impostazione predefinita, in Xamarin.Android 6.1 questa variabile di ambiente non è impostata e verrà usata la classe HttpClientHandler.

In alternativa, è possibile specificare il valore Xamarin.Android.Net.AndroidClientHandler da usare java.net.URLConnection per l'accesso alla rete, che può consentire l'uso di TLS 1.2 quando Android lo supporta.

Aggiunto in Xamarin.Android 6.1.

Proprietà di sistema di Xamarin.Android

Xamarin.Android supporta le proprietà di sistema seguenti, che possono essere impostate tramite adb shell setprop o tramite l'azione di compilazione $(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

Il valore della proprietà di sistema debug.mono.debug è un intero. Se 1, si comporta "come se" il processo fosse stato avviato con mono --debug. In genere visualizza le informazioni su file e righe in analisi dello stack e così via, senza che l'app debba essere avviata da un debugger.

debug.mono.env

Contiene un elenco delle variabili di ambiente delimitato da |.

debug.mono.gc

Il valore della proprietà di sistema debug.mono.gc è un intero. Se 1, verranno registrate le informazioni relative a GC.

Equivale ad avere la proprietà di sistema debug.mono.log contenente gc.

debug.mono.log

Controlla quali informazioni aggiuntive verranno registrate da Xamarin.Android in adb logcat. Si tratta di una stringa delimitata da virgole (,), contenente uno dei valori seguenti:

  • all: visualizza tutti i messaggi. Non è in genere una scelta valida, perché include i messaggi lref.
  • assembly: visualizza il file .apk e i messaggi di analisi dell'assembly.
  • gc: visualizza i messaggi relativi a GC.
  • gref: visualizza i messaggi di riferimento globale JNI.
  • lref: visualizza i messaggi di riferimento locale JNI.

    Nota

    si tratta effettivamente di adb logcat di posta indesiderata. In Xamarin.Android 5.1 verrà anche creato un file .__override__/lrefs.txt, che può assumere dimensioni enormi. Evitare.

  • timing: visualizza alcune informazioni sugli intervalli dei metodi. Verranno anche creati i file .__override__/methods.txt e .__override__/counters.txt.

debug.mono.max_grefc

Il valore della proprietà di sistema debug.mono.max_grefc è un intero. Il valore esegue l'override del conteggio di GREF massimo rilevato predefinito per il dispositivo di destinazione.

Nota: questa proprietà può essere usata solo con adb shell setprop debug.mono.max_grefc perché il valore non sarà disponibile in tempo con un file environment.txt.

debug.mono.profile

La proprietà di sistema debug.mono.profile abilita il profiler. Equivale all'opzione mono --profile e usa gli stessi valori. Per altre informazioni, vedere la pagina di manuale mono(1).

debug.mono.runtime_args

La proprietà di sistema debug.mono.runtime_args contiene opzioni aggiuntive che devono essere analizzate da mono.

debug.mono.trace

La proprietà di sistema debug.mono.trace abilita l'analisi. Equivale all'opzione mono --trace e usa gli stessi valori. Per altre informazioni, vedere la pagina di manuale mono(1).

In generale, non usarla. L'uso dell'analisi visualizzerà un output adb logcat indesiderato e rallenterà considerevolmente e modificherà il comportamento del programma (fino ad aggiungere ulteriori condizioni di errore).

Tuttavia a volte consente di eseguire ulteriori indagini.

debug.mono.wref

La proprietà di sistema debug.mono.wref consente l'override del meccanismo di riferimento debole JNI rilevato predefinito. I valori supportati sono due:

  • jni: usa i riferimenti deboli JNI, creati da JNIEnv::NewWeakGlobalRef() ed eliminati definitivamente da JNIEnv::DeleteWeakGlobalREf().
  • java: usare riferimenti globali JNI che fanno riferimento java.lang.WeakReference alle istanze.

Per impostazione predefinita, java viene usato fino all'API 7 e nell'API 19 (Kit Kat) con ART abilitato. (API-8 ha aggiunto jni riferimenti e ART ha interrotto jni i riferimenti.

Questa proprietà di sistema è utile per i test e per alcune forme di analisi. In generale non deve essere modificata.

XA_HTTP_CLIENT_HANDLER_TYPE

Questa variabile di ambiente, introdotta in Xamarin.Android 6.1, dichiara l'implementazione HttpMessageHandler predefinita che verrà usata da HttpClient. Per impostazione predefinita, questa variabile non è impostata e Xamarin.Android userà HttpClientHandler.

XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler

Nota

Il dispositivo Android sottostante deve supportare TLS 1.2. Android 5.0 e versioni successive supportano TLS 1.2

Esempio

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