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 messaggilref
.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 daJNIEnv::NewWeakGlobalRef()
ed eliminati definitivamente daJNIEnv::DeleteWeakGlobalREf()
.java
: usare riferimenti globali JNI che fanno riferimentojava.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=