Teilen über


Xamarin.Android-Umgebung

Ausführungsumgebung

Die Ausführungsumgebung ist die Menge an Umgebungsvariablen und Android-Systemeigenschaften, die die Programmausführung beeinflussen. Android-Systemeigenschaften können mit dem Befehl adb shell setprop festgelegt werden, während Umgebungsvariablen mit der Systemeigenschaft debug.mono.env festgelegt werden können:

## 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-Systemeigenschaften werden für alle Vorgänge auf dem Zielgerät festgelegt.

Ab Xamarin.Android 4.6 können sowohl Systemeigenschaften als auch Umgebungsvariablen anwendungsbasiert festgelegt und überschrieben werden, indem Sie dem Projekt eine Umgebungsdatei hinzufügen. Eine Umgebungsdatei ist eine mit UNIX formatierte Textdatei mit einem Buildvorgang von AndroidEnvironment. Die Umgebungsdatei enthält Zeilen mit dem Format key=value. Kommentare sind Zeilen, die mit # beginnen. Leere Zeilen werden ignoriert.

Wenn key mit einem Großbuchstaben beginnt, wird key als Umgebungsvariable behandelt und setenv(3) wird verwendet, um Umgebungsvariablen beim Prozessstart auf den angegebenen Wert festzulegen.

Wenn key mit einem Kleinbuchstaben beginnt, wird key als Android-Systemeigenschaft behandelt, und value ist der Standardwert: Android-Systemeigenschaften, die das Ausführungsverhalten von Xamarin.Android steuern, werden zuerst vom Android-Systemeigenschaftsspeicher gesucht, und wenn kein Wert vorhanden ist, wird der Wert verwendet, der in der Umgebungsdatei angegeben wurde. Dadurch ist es möglich, adb shell setprop zum Überschreiben von Werten zu Diagnosezwecken zu verwenden, die aus der Umgebungsdatei stammen.

Xamarin.Android-Umgebungsvariablen

Xamarin.Android unterstützt die XA_HTTP_CLIENT_HANDLER_TYPE-Variable, die entweder über adb shell setprop debug.mono.env oder den Buildvorgang $(AndroidEnvironment) festgelegt werden kann.

XA_HTTP_CLIENT_HANDLER_TYPE

Der Typ mit Assemblyqualifikation, der vom HttpMessageHandler erben muss und mit dem Standardkonstruktor HttpClient() erstellt wurde.

In Xamarin.Android 6.1 ist diese Umgebungsvariable standardmäßig nicht festgelegt. HttpClientHandler wird verwendet.

Alternativ kann der Wert Xamarin.Android.Net.AndroidClientHandler angegeben werden, um java.net.URLConnection für den Netzwerkzugriff, der die Verwendung von TLS 1.2 zulassen kann , wenn Android dies unterstützt.

In Xamarin.Android 6.1 hinzugefügt.

Xamarin.Android-Systemeigenschaften

Xamarin.Android unterstützt die folgenden Systemeigenschaften, die entweder über adb shell setprop oder den Buildvorgang $(AndroidEnvironment) festgelegt werden können.

  • 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

Der Wert der Systemeigenschaft debug.mono.debug ist eine ganze Zahl. Wenn er 1 ist, verhalten Sie sich als wäre der Prozess mit mono --debug gestartet worden. Dadurch werden für gewöhnlich Datei- und Zeileninformationen in Stapelüberwachungen usw. angezeigt, ohne dass die App von einem Debugger gestartet werden muss.

debug.mono.env

Enthält eine durch | getrennte Liste von Umgebungsvariablen.

debug.mono.gc

Der Wert der Systemeigenschaft debug.mono.gc ist eine ganze Zahl. Wenn der Wert 1 ist, sollten GC-Informationen erfasst werden.

Die ist genauso, als würde die Systemeigenschaft debug.mono.loggc enthalten.

debug.mono.log

Steuert, welche Zusatzinformationen Xamarin.Android in adb logcat erfasst. Dabei handelt es sich um eine Zeichenfolge mit Trennzeichen (,), die einen der folgenden Werte enthält:

  • all: Ausgeben aller Meldungen. Das ist nur selten sinnvoll, da es auch lref-Meldungen einschließt.
  • assembly: Ausgeben von .apk und Assemblyanalysemeldungen.
  • gc: Ausgeben von Meldungen, die mit GC in Verbindung stehen.
  • gref: Ausgeben von Meldungen zu globalen JNI-Verweisen.
  • lref: Ausgeben von Meldungen zu lokalen JNI-Verweisen.

    Hinweis

    Dadurch wird eine große Anzahl von Einträgen in adb logcat erstellt. In Xamarin.Android 5.1 wird dadurch auch eine .__override__/lrefs.txt-Datei erstellt, die sehr groß werden kann. Vermeiden Sie dies.

  • timing: Ausgeben von Informationen zur zeitlichen Steuerung von Methoden. Dadurch werden auch die Dateien .__override__/methods.txt und .__override__/counters.txt erstellt.

debug.mono.max_grefc

Der Wert der Systemeigenschaft debug.mono.max_grefc ist eine ganze Zahl. Er überschreibt den erkannten maximalen Standard-GREF-Wert für das Zielgerät.

Hinweis: Dies kann nur mit adb shell setprop debug.mono.max_grefc verwendet werden, da der Wert nicht gleichzeitig mit der Datei environment.txt verfügbar ist.

debug.mono.profile

Die Systemeigenschaft debug.mono.profile aktiviert den Profiler. Sie entspricht der Option mono --profile und verwendet die gleichen Werte. (Weitere Informationen finden Sie auf der mono(1)-Manpage.)

debug.mono.runtime_args

Die Systemeigenschaft debug.mono.runtime_args enthält zusätzliche Optionen, die von mono analysiert werden müssen.

debug.mono.trace

Die Systemeigenschaft debug.mono.trace aktiviert die Ablaufverfolgung. Sie entspricht der Option mono --trace und verwendet die gleichen Werte. (Weitere Informationen finden Sie auf der mono(1)-Manpage.)

Verwenden Sie dies unter normalen Umständen nicht. Die Ablaufverfolgung füllt die adb logcat-Ausgabe sehr schnell auf, sodass das Programm deutlich verlangsamt und das Programmverhalten verändert wird (bis hin zu zusätzlichen Fehlerbedingungen).

Manchmal können dadurch jedoch zusätzliche Untersuchungen durchgeführt werden...

debug.mono.wref

Die Systemeigenschaft debug.mono.wref ermöglicht das Überschreiben des erkannten schwachen JIN-Verweismechanismus (Weak Reference). Es gibt zwei unterstützte Werte:

  • jni: Verwenden von schwachen JIN-Verweisen, die von JNIEnv::NewWeakGlobalRef() erstellt und von JNIEnv::DeleteWeakGlobalREf() gelöscht werden.
  • java: Globale JNI-Verweise werden verwendet. Diese verweisen auf java.lang.WeakReference-Instanzen.

java wird standardmäßig von API-7 bis API-19 (Kit Kat) mit aktiviertem ART verwendet. (API-8-Verweise hinzugefügt jni , und ART-Verweise sind unterbrochenjni .)

Diese Systemeigenschaft ist zum Testen und Untersuchen nützlich. Unter normalen Umständen sollte sie nicht geändert werden.

XA_HTTP_CLIENT_HANDLER_TYPE

Diese Umgebungsvariable, die zuerst in Xamarin.Android 6.1 eingeführt wurde, deklariert die HttpMessageHandler-Standardimplementierung, die vom HttpClient verwendet wird. Standardmäßig ist diese Variable nicht festgelegt, und Xamarin.Android verwendet den HttpClientHandler.

XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler

Hinweis

Das zugrunde liegende Android-Gerät muss TLS 1.2 unterstützen. Android 5.0 und höher unterstützt TLS 1.2.

Beispiel

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