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.dll
itp.) i bibliotekę powiązań systemu Android (Mono.Android.dll
itp.). 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.package
lokalizacji . 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:
$(AndroidAapt2CompileExtraArgs)
$(AndroidAapt2LinkExtraArgs)
$(AndroidExplicitCrunch)
$(AndroidR8IgnoreWarnings)
$(AndroidResgenExtraArgs)
$(AndroidResgenFile)
$(AndroidUseAapt2)
$(MonoAndroidResourcePrefix)
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:
$(AndroidDebugKeyAlgorithm)
$(AndroidDebugKeyValidity)
$(AndroidDebugStoreType)
$(AndroidKeyStore)
$(AndroidSigningKeyAlias)
$(AndroidSigningKeyPass)
$(AndroidSigningKeyStore)
$(AndroidSigningStorePass)
$(JarsignerTimestampAuthorityCertificateAlias)
$(JarsignerTimestampAuthorityUrl)
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.targets
pliku , 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.