Rozmiar pakietu aplikacji

W tym artykule przeanalizować części składowe pakietu aplikacji platformy Xamarin.Android oraz skojarzone strategie, które mogą służyć do wydajnego wdrażania pakietów podczas etapów debugowania i wydawania programowania.

Omówienie

Platforma Xamarin.Android używa różnych mechanizmów, aby zminimalizować rozmiar pakietu przy zachowaniu wydajnego procesu debugowania i wdrażania wydania. W tym artykule przyjrzymy się przepływowi pracy wdrażania platformy Xamarin.Android i debugowania oraz jak platforma Xamarin.Android zapewnia kompilowanie i wydawanie małych pakietów aplikacji.

Pakiety wydań

Aby dostarczyć w pełni zawartą aplikację, pakiet musi zawierać aplikację, skojarzone biblioteki, zawartość, środowisko uruchomieniowe Mono i wymagane zestawy biblioteki klas bazowych (BCL). Jeśli na przykład użyjemy domyślnego szablonu "Hello World", zawartość kompletnej kompilacji pakietu będzie wyglądać następująco:

Package size before linker

15,8 MB to większy rozmiar pobierania, niż chcielibyśmy. Problem polega na bibliotekach BCL, ponieważ obejmują biblioteki mscorlib, System i Mono.Android, które zapewniają wiele niezbędnych składników do uruchamiania aplikacji. Zapewniają one jednak również funkcje, których nie można używać w aplikacji, dlatego warto wykluczyć te składniki.

Podczas tworzenia aplikacji do dystrybucji wykonujemy proces znany jako Link, który analizuje aplikację i usuwa dowolny kod, który nie jest bezpośrednio używany. Ten proces jest podobny do funkcji, które funkcja odzyskiwania pamięci zapewnia dla przydzielonej stosu pamięci. Jednak zamiast obsługiwać obiekty, łączenie działa za pośrednictwem kodu. Na przykład w System.dll istnieje cała przestrzeń nazw do wysyłania i odbierania wiadomości e-mail, ale jeśli aplikacja nie korzysta z tej funkcji, ten kod po prostu marnuje miejsce. Po uruchomieniu konsolidatora w aplikacji Hello World nasz pakiet wygląda teraz następująco:

Package size after linker

Jak widać, powoduje to usunięcie znacznej ilości listy BCL, która nie była używana. Należy pamiętać, że ostateczny rozmiar listy BCL zależy od rzeczywistego użycia aplikacji. Jeśli na przykład przyjrzymy się bardziej znaczącej przykładowej aplikacji o nazwie ApiDemo, możemy zobaczyć, że składnik BCL zwiększył rozmiar, ponieważ usługa ApiDemo używa większej liczby list BCL niż Hello, World wykonuje następujące czynności:

ApiDemo package size after linking

Jak pokazano w tym miejscu, rozmiar pakietu aplikacji będzie zazwyczaj wynosić około 2,9 MB większy niż aplikacja i jej zależności.

Debugowanie pakietów

Elementy są obsługiwane nieco inaczej w przypadku kompilacji debugowania. W przypadku ponownego wdrażania na urządzeniu aplikacja musi być tak szybka, jak to możliwe, dlatego optymalizujemy pakiety debugowania pod kątem szybkości wdrażania, a nie rozmiaru.

System Android jest stosunkowo powolny do kopiowania i instalowania pakietu, więc chcemy, aby rozmiar pakietu był możliwie najmniejszy. Jak wspomniano powyżej, jednym z możliwych sposobów zminimalizowania rozmiaru pakietu jest za pośrednictwem konsolidatora. Jednak łączenie działa wolno i zazwyczaj chcemy wdrożyć tylko części aplikacji, które uległy zmianie od czasu ostatniego wdrożenia. W tym celu oddzielimy naszą aplikację od podstawowych składników platformy Xamarin.Android.

Podczas pierwszego debugowania na urządzeniu kopiujemy dwa duże pakiety o nazwie Shared Runtime i Shared Platform. Środowisko uruchomieniowe udostępnione zawiera środowisko uruchomieniowe Mono i listę BCL, a platforma udostępniona zawiera zestawy specyficzne dla interfejsu API systemu Android:

Shared runtime package size

Kopiowanie tych podstawowych składników odbywa się tylko raz, ponieważ zajmuje sporo czasu, ale umożliwia korzystanie z nich wszystkich kolejnych aplikacji działających w trybie debugowania. Na koniec skopiujemy rzeczywistą aplikację, która jest mała i szybka:

The actual application is small

Szybkie wdrażanie zestawów

Opcja kompilacji szybkiego wdrażania zestawu może służyć do dalszego zmniejszenia rozmiaru pakietu instalacji debugowania, nie uwzględniając zestawów w pakiecie aplikacji, instalowania zestawów bezpośrednio na urządzeniu tylko raz i tylko kopiowania plików, które zostały zmodyfikowane od ostatniego wdrożenia.

Aby włączyć szybkie wdrażanie zestawów, wykonaj następujące czynności:

  1. Kliknij prawym przyciskiem myszy projekt systemu Android w Eksplorator rozwiązań i wybierz pozycję Opcje.

  2. W oknie dialogowym Opcje projektu wybierz pozycję Kompilacja systemu Android:

    Project Options Android Build

  3. Zaznacz pole wyboru Użyj współużytkowanego środowiska uruchomieniowego Mono i pola wyboru Szybkie wdrażanie zestawu:

    Checkboxes selected under Packaging tab

  4. Kliknij przycisk OK, aby zapisać zmiany i zamknąć okno dialogowe Opcje projektu.

Następnym razem, gdy aplikacja zostanie skompilowana na potrzeby debugowania, zestawy zostaną zainstalowane bezpośrednio na urządzeniu (jeśli jeszcze tego nie zrobiono), a na urządzeniu zostanie zainstalowany mniejszy pakiet aplikacji (który nie zawiera zestawów). Skróci to czas potrzebny na wprowadzenie zmian w aplikacji w celu przetestowania.

Dzięki długotrwałemu pierwszemu wdrożeniu udostępnionego środowiska uruchomieniowego i platformy udostępnionej za każdym razem, gdy wprowadzamy zmianę w aplikacji, możemy szybko i bezboleśnie wdrożyć nową wersję, aby umożliwić szybką zmianę/wdrożenie/cykl uruchamiania.

Podsumowanie

W tym artykule przeanalizowaliśmy aspekty tworzenia pakietów profilów wersji platformy Xamarin.Android i debugowania. Ponadto przyjrzeliśmy się strategiom używanym przez platformę Mono dla systemu Android w celu ułatwienia wydajnego wdrażania pakietów podczas etapów debugowania i wydawania programowania.