Środowisko Xamarin.Android
Środowisko wykonywania
Środowisko wykonywania to zestaw zmiennych środowiskowych i właściwości systemu Android mających wpływ na wykonywanie programu. Właściwości systemu Android można ustawić za adb shell setprop
pomocą polecenia , podczas gdy zmienne środowiskowe można ustawić przez ustawienie debug.mono.env
właściwości systemowej:
## 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'"
Właściwości systemu Android są ustawiane dla wszystkich procesów na urządzeniu docelowym.
Począwszy od platformy Xamarin.Android 4.6, zarówno właściwości systemowe, jak i zmienne środowiskowe mogą być ustawiane lub zastępowane dla poszczególnych aplikacji przez dodanie pliku środowiskowego do projektu. Plik środowiska to plik w formacie unix w postaci zwykłego tekstu z akcją Kompilacja .AndroidEnvironment
Plik środowiska zawiera wiersze z formatem key=value.
Komentarze to wiersze rozpoczynające się od #
. Puste wiersze są ignorowane.
Jeśli klucz zaczyna się od wielkiej litery, klucz jest traktowany jako zmienna środowiskowa i setenv(3) służy do ustawiania zmiennej środowiskowej na określoną wartość podczas uruchamiania procesu.
Jeśli klucz zaczyna się od małej litery, klucz jest traktowany jako właściwość systemu Android, a wartość jest wartością domyślną: Właściwości systemu Android kontrolujące zachowanie wykonywania platformy Xamarin.Android są najpierw wyszukane w magazynie właściwości systemu Android, a jeśli nie ma żadnej wartości, zostanie użyta wartość określona w pliku środowiska. Ma to na celu przesłonięcia adb shell setprop
wartości, które pochodzą z pliku środowiskowego do celów diagnostycznych.
Zmienne środowiskowe platformy Xamarin.Android
Platforma Xamarin.Android obsługuje zmienną XA_HTTP_CLIENT_HANDLER_TYPE
, która może być ustawiana za pośrednictwem adb shell setprop debug.mono.env
akcji Kompilacja lub za pomocą niej $(AndroidEnvironment)
.
XA_HTTP_CLIENT_HANDLER_TYPE
Typ kwalifikowany do zestawu, który musi dziedziczyć z programu HttpMessageHandler i jest konstruowany z konstruktora domyślnegoHttpClient()
.
W środowisku Xamarin.Android 6.1 ta zmienna środowiskowa nie jest ustawiona domyślnie, a program HttpClientHandler będzie używany.
Alternatywnie można określić wartość Xamarin.Android.Net.AndroidClientHandler
do użycia java.net.URLConnection
w przypadku dostępu do sieci, który może zezwalać na korzystanie z protokołu TLS 1.2, gdy obsługuje go system Android.
Dodano element w środowisku Xamarin.Android 6.1.
Właściwości systemu Xamarin.Android
Platforma Xamarin.Android obsługuje następujące właściwości systemowe, które można ustawić za pośrednictwem akcji kompilacji lub za pośrednictwem adb shell setprop
akcji Kompilacja $(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
Wartość właściwości systemowej debug.mono.debug
jest liczbą całkowitą. Jeśli 1
wartość , zachowaj wartość "tak, jakby" proces został uruchomiony z mono --debug
.
Zazwyczaj pokazuje informacje o plikach i wierszach w śladach stosu itp., bez konieczności uruchamiania aplikacji z debugera.
debug.mono.env
Zawiera rozdzielaną listą |
zmiennych środowiskowych.
debug.mono.gc
Wartość właściwości systemowej debug.mono.gc
jest liczbą całkowitą.
Jeśli 1
wartość , należy zarejestrować informacje O GC.
Jest to równoważne temu, że właściwość systemowa debug.mono.log
zawiera gc
wartość .
debug.mono.log
Steruje dodatkowymi informacjami, które platforma Xamarin.Android zaloguje się do adb logcat
usługi .
Jest to ciąg rozdzielony przecinkami (,
), zawierający jedną z następujących wartości:
all
: Wydrukuj wszystkie komunikaty. Jest to rzadko dobry pomysł, ponieważ zawieralref
komunikaty.assembly
: Drukowanie.apk
i analizowanie komunikatów zestawów.gc
: Wydrukuj komunikaty związane z GC.gref
: Wyświetl komunikaty referencyjne globalne JNI.lref
: wyświetl lokalne komunikaty referencyjne JNI.Uwaga
To naprawdę będzie spam
adb logcat
. W środowisku Xamarin.Android 5.1 spowoduje to również utworzenie.__override__/lrefs.txt
pliku, który może być gigantyczny. Unikać.timing
: wyświetl informacje o chronometrażu metody. Spowoduje to również utworzenie plików.__override__/methods.txt
i.__override__/counters.txt
.
debug.mono.max_grefc
Wartość właściwości systemowej debug.mono.max_grefc
jest liczbą całkowitą.
Wartość zastępuje domyślną wykrytą maksymalną liczbę GREF dla urządzenia docelowego.
Uwaga: jest to możliwe tylko do użycia adb shell setprop debug.mono.max_grefc
, ponieważ wartość nie będzie dostępna w czasie z plikiem environment.txt .
debug.mono.profile
Właściwość debug.mono.profile
systemowa włącza profilera.
Jest ona równoważna i używa tych samych wartości co mono --profile
opcja . (Zobacz mono(1) strona człowieka, aby uzyskać więcej informacji).
debug.mono.runtime_args
Właściwość debug.mono.runtime_args
systemowa zawiera dodatkowe opcje, które powinny być analizowane przez mono.
debug.mono.trace
Właściwość systemowa debug.mono.trace
umożliwia śledzenie.
Jest ona równoważna i używa tych samych wartości co mono --trace
opcja . (Zobacz mono(1) strona człowieka, aby uzyskać więcej informacji).
Ogólnie rzecz biorąc, nie należy używać. Użycie funkcji śledzenia spowoduje spamowanie danych wyjściowych adb logcat
, kilkudniowe spowolnienie działania programu i zmianę zachowania programu (do i w tym dodanie dodatkowych warunków błędu).
Czasami jednak pozwala to na przeprowadzenie dodatkowego badania...
debug.mono.wref
Właściwość debug.mono.wref
systemowa umożliwia zastąpienie domyślnego wykrytego mechanizmu słabego odwołania JNI. Istnieją dwie obsługiwane wartości:
jni
: Użyj słabych odwołań JNI, utworzonych przez i zniszczonych przezJNIEnv::NewWeakGlobalRef()
JNIEnv::DeleteWeakGlobalREf()
.java
: Użyj odwołań globalnych JNI, które odwołują się dojava.lang.WeakReference
wystąpień.
java
jest używany domyślnie za pośrednictwem interfejsu API-7 i interfejsu API-19 (Kit Kat) z włączoną funkcją ART. (Dodano jni
odwołania interfejsu API-8, a odwołania do art zostały złamanejni
).
Ta właściwość systemowa jest przydatna do testowania i niektórych form badania. Ogólnie rzecz biorąc, nie należy go zmieniać.
XA_HTTP_CLIENT_HANDLER_TYPE
Po raz pierwszy wprowadzony w środowisku Xamarin.Android 6.1 ta zmienna środowiskowa deklaruje domyślną HttpMessageHandler
implementację, która będzie używana przez HttpClient
program . Domyślnie ta zmienna nie jest ustawiona, a platforma Xamarin.Android użyje elementu HttpClientHandler
.
XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
Uwaga
Podstawowe urządzenie z systemem Android musi obsługiwać protokół TLS 1.2. System Android 5.0 lub nowszy obsługują protokół TLS 1.2
Przykład
## 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=