Udostępnij za pośrednictwem


Proces kompilacji

Proces kompilacji platformy Xamarin.Android jest odpowiedzialny za łączenie wszystkich elementów: generowanie , obsługa @(AndroidResource)Resource.designer.cs@(AndroidAsset)akcji kompilacji , i innych akcji kompilacji, generowanie zawijania z możliwością wywołania systemu Android i generowanie elementu .apk do wykonania na urządzeniach z systemem Android.

Pakiety aplikacji

Ogólnie mówiąc, istnieją dwa typy pakietów aplikacji systemu Android (.apk plików), które system kompilacji platformy Xamarin.Android może wygenerować:

  • Kompilacje wydania , które są w pełni samodzielne i nie wymagają dodatkowych pakietów do wykonania. Są to pakiety dostarczane do sklepu App Store.

  • Kompilacje debugowania , które nie są.

Te typy pakietów pasują do programu MSBuild Configuration , który generuje pakiet.

Środowisko uruchomieniowe udostępnione

Przed programem Xamarin.Android 11.2 środowisko uruchomieniowe udostępnione było parą dodatkowych pakietów systemu Android, które udostępniają bibliotekę klas bazowych (mscorlib.dllitp.) i bibliotekę powiązań systemu Android (Mono.Android.dllitp.). Kompilacje debugowania opierają się na udostępnionym środowisku uruchomieniowym zamiast dołączania biblioteki klas podstawowych i zestawów powiązań w pakiecie aplikacji systemu Android, co pozwala na zmniejszenie pakietu debugowania.

Współużytkowane środowisko uruchomieniowe można wyłączyć w kompilacjach debugowania, ustawiając $(AndroidUseSharedRuntime) właściwość na False.

Obsługa środowiska uruchomieniowego udostępnionego została usunięta w środowisku Xamarin.Android 11.2.

Szybkie wdrażanie

Szybkie wdrażanie działa poprzez dalsze zmniejszanie rozmiaru pakietu aplikacji systemu Android. Odbywa się to przez wykluczenie zestawów aplikacji z pakietu, a zamiast tego wdrożenie zestawów aplikacji bezpośrednio do katalogu wewnętrznego files aplikacji, zwykle znajdującego się w /data/data/com.some.packagelokalizacji . Katalog wewnętrzny files nie jest globalnie zapisywalnym folderem, dlatego run-as narzędzie służy do wykonywania wszystkich poleceń w celu skopiowania plików do tego katalogu.

Ten proces przyspiesza cykl kompilacji/wdrażania/debugowania, ponieważ pakiet nie jest ponownie instalowany po zmianie tylko zestawów. Tylko zaktualizowane zestawy są ponownie synchronizowane z urządzeniem docelowym.

Ostrzeżenie

Szybkie wdrażanie jest znane jako niepowodzenie na urządzeniach, które blokują run-as, które często zawierają urządzenia starsze niż Android 5.0.

Szybkie wdrażanie jest domyślnie włączone i może być wyłączone w kompilacjach debugowania przez ustawienie $(EmbedAssembliesIntoApk) właściwości na True.

Rozszerzony tryb szybkiego wdrażania można używać w połączeniu z tą funkcją, aby jeszcze bardziej przyspieszyć wdrożenia. Spowoduje to wdrożenie obu zestawów, bibliotek natywnych, map typów i plików dexes w files katalogu. Należy jednak włączyć tę funkcję tylko wtedy, gdy zmieniasz biblioteki natywne, powiązania lub kod Java.

Projekty programu MSBuild

Proces kompilacji platformy Xamarin.Android jest oparty na programie MSBuild, który jest również formatem pliku projektu używanym przez Visual Studio dla komputerów Mac i program Visual Studio. Zazwyczaj użytkownicy nie będą musieli ręcznie edytować plików MSBuild — środowisko IDE tworzy w pełni funkcjonalne projekty i aktualizuje je za pomocą wprowadzonych zmian i automatycznie wywołuje obiekty docelowe kompilacji zgodnie z potrzebami.

Użytkownicy zaawansowani mogą chcieć robić rzeczy, które nie są obsługiwane przez graficzny interfejs użytkownika środowiska IDE, więc proces kompilacji można dostosowywać przez bezpośrednie edytowanie pliku projektu. Ta strona zawiera tylko funkcje i dostosowania specyficzne dla platformy Xamarin.Android — wiele innych rzeczy jest możliwych w przypadku normalnych elementów, właściwości i elementów docelowych programu MSBuild.

Wiązanie projektów

Następujące właściwości programu MSBuild są używane z projektami powiązania:

Resource.designer.cs Generacji

Następujące właściwości programu MSBuild służą do kontrolowania generowania Resource.designer.cs pliku:

Właściwości podpisywania

Właściwości podpisywania kontrolują sposób podpisywania pakietu aplikacji, aby mógł zostać zainstalowany na urządzeniu z systemem Android. Aby umożliwić szybszą iterację kompilacji, zadania platformy Xamarin.Android nie podpisują pakietów podczas procesu kompilacji, ponieważ podpisywanie jest dość powolne. Zamiast tego są podpisane (w razie potrzeby) przed instalacją lub podczas eksportowania przez środowisko IDE lub miejsce docelowe instalacji kompilacji. Wywołanie elementu docelowego SignAndroidPackage spowoduje utworzenie pakietu z sufiksem -Signed.apk w katalogu wyjściowym.

Domyślnie element docelowy podpisywania generuje nowy klucz podpisywania debugowania w razie potrzeby. Jeśli chcesz użyć określonego klucza, na przykład na serwerze kompilacji, używane są następujące właściwości programu MSBuild:

keytool Mapowanie opcji

Rozważ następujące keytool wywołanie:

$ keytool -genkey -v -keystore filename.keystore -alias keystore.alias -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password: keystore.filename password
Re-enter new password: keystore.filename password
...
Is CN=... correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: ...
Enter key password for keystore.alias
        (RETURN if same as keystore password): keystore.alias password
[Storing filename.keystore]

Aby użyć powyższego magazynu kluczy, użyj grupy właściwości:

<PropertyGroup>
    <AndroidKeyStore>True</AndroidKeyStore>
    <AndroidSigningKeyStore>filename.keystore</AndroidSigningKeyStore>
    <AndroidSigningStorePass>keystore.filename password</AndroidSigningStorePass>
    <AndroidSigningKeyAlias>keystore.alias</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>keystore.alias password</AndroidSigningKeyPass>
</PropertyGroup>

Punkty rozszerzenia kompilacji

System kompilacji platformy Xamarin.Android uwidacznia kilka publicznych punktów rozszerzenia dla użytkowników, którzy chcą podłączyć się do naszego procesu kompilacji. Aby użyć jednego z tych punktów rozszerzenia, należy dodać niestandardowy element docelowy do odpowiedniej właściwości MSBuild w obiekcie PropertyGroup. Na przykład:

<PropertyGroup>
   <AfterGenerateAndroidManifest>
      $(AfterGenerateAndroidManifest);
      YourTarget;
   </AfterGenerateAndroidManifest>
</PropertyGroup>

Punkty rozszerzeń obejmują:

Uwaga dotycząca rozszerzania procesu kompilacji: jeśli nie zostało napisane poprawnie, rozszerzenia kompilacji mogą mieć wpływ na wydajność kompilacji, zwłaszcza jeśli są uruchamiane w każdej kompilacji. Zdecydowanie zaleca się przeczytanie dokumentacji programu MSBuild przed zaimplementowaniem takich rozszerzeń.

Definicje docelowe

Specyficzne dla platformy Xamarin.Android części procesu kompilacji są zdefiniowane w $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targetspliku , ale do kompilowania zestawu są również wymagane normalne obiekty docelowe specyficzne dla języka, takie jak Microsoft.CSharp.targets .

Przed zaimportowaniem dowolnych elementów docelowych języka należy ustawić następujące właściwości kompilacji:

<PropertyGroup>
  <TargetFrameworkIdentifier>MonoDroid</TargetFrameworkIdentifier>
  <MonoDroidVersion>v1.0</MonoDroidVersion>
  <TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>

Wszystkie te obiekty docelowe i właściwości można uwzględnić w języku C#, importując obiekty docelowe Xamarin.Android.CSharp.:

<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

Ten plik można łatwo dostosować do innych języków.