Udostępnij za pośrednictwem


Ś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 1wartość , 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 1wartość , należy zarejestrować informacje O GC.

Jest to równoważne temu, że właściwość systemowa debug.mono.log zawiera gcwartość .

debug.mono.log

Steruje dodatkowymi informacjami, które platforma Xamarin.Android zaloguje się do adb logcatusł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ż zawiera lref 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. Uniknąć.

  • 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 przez JNIEnv::NewWeakGlobalRef()JNIEnv::DeleteWeakGlobalREf().
  • java: Użyj odwołań globalnych JNI, które odwołują się do java.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 HttpClientprogram . 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=