Proces sestavení

Proces sestavení Xamarin.Android zodpovídá za společné připojování všeho: generování Resource.designer.cs, podpory @(AndroidAsset), @(AndroidResource)a dalších akcí sestavení, generování obálky s androidem volatelných a generování spuštění na zařízeních s Androidem .apk .

Balíčky aplikací

Obecně platí, že existují dva typy balíčků aplikací pro Android (.apk soubory), které může vygenerovat systém sestavení Xamarin.Android:

  • Vydané buildy, které jsou plně samostatné a nevyžadují provedení dalších balíčků. Jedná se o balíčky, které jsou k dispozici v App Storu.

  • Ladění buildů, které nejsou.

Tyto typy balíčků odpovídají nástroji MSBuild Configuration , který vytvoří balíček.

Sdílený modul runtime

Před Xamarin.Android 11.2 byl sdílený modul runtime dvojicí dalších balíčků Pro Android, které poskytují knihovnu základních tříd (mscorlib.dllatd.) a knihovnu vazeb Androidu (Mono.Android.dllatd.). Ladicí sestavení spoléhají na sdílený modul runtime místo zahrnutí sestavení základní třídy a vazeb v balíčku aplikace pro Android, což umožňuje menší ladění balíčku.

Sdílený modul runtime může být v buildech ladění zakázán nastavením $(AndroidUseSharedRuntime)vlastnost .False

Podpora sdíleného modulu runtime byla odebrána v Xamarin.Android 11.2.

Rychlé nasazení

Rychlé nasazení funguje tak, že se dále zmenší velikost balíčku aplikace pro Android. To se provádí vyloučením sestavení aplikace z balíčku a nasazením sestavení aplikace přímo do interního files adresáře aplikace, obvykle umístěného v /data/data/com.some.package. Interní files adresář není globálně zapisovatelná složka, takže run-as nástroj slouží ke spuštění všech příkazů ke zkopírování souborů do daného adresáře.

Tento proces zrychluje cyklus sestavení, nasazení nebo ladění, protože balíček není přeinstalován při změně pouze sestavení. Do cílového zařízení se znovu synchronizují pouze aktualizovaná sestavení.

Upozorňující

Rychlé nasazení je známo, že na zařízeních, která blokují run-as, což často zahrnuje zařízení starší než Android 5.0.

Rychlé nasazení je ve výchozím nastavení povolené a v buildech Debug může být zakázáno nastavením $(EmbedAssembliesIntoApk) vlastnosti na Truehodnotu .

Režim rozšířeného rychlého nasazení lze použít ve spojení s touto funkcí, aby se nasazení ještě více urychlila. Tím se do adresáře nasadí obě sestavení, nativní knihovny, mapy typů a dexy files . Pokud ale měníte nativní knihovny, vazby nebo kód Java, měli byste to opravdu povolit.

Projekty MSBuild

Proces sestavení Xamarin.Android je založený na nástroji MSBuild, což je také formát souboru projektu používaný Visual Studio pro Mac a sadou Visual Studio. Obvykle uživatelé nebudou muset upravovat soubory MSBuild ručně – integrované vývojové prostředí (IDE) vytváří plně funkční projekty a aktualizuje je všemi provedenými změnami a podle potřeby automaticky vyvolá cíle sestavení.

Pokročilí uživatelé můžou chtít dělat věci, které grafické uživatelské rozhraní IDE nepodporuje, takže proces sestavení je přizpůsobitelný úpravou souboru projektu přímo. Tato stránka dokumentuje pouze funkce a přizpůsobení specifické pro Xamarin.Android – s normálními položkami, vlastnostmi a cíli nástroje MSBuild je možné provádět mnoho dalších věcí.

Vazby projektů

V projektech vazby se používají následující vlastnosti nástroje MSBuild:

Resource.designer.cs Generace

Následující vlastnosti nástroje MSBuild slouží k řízení generování Resource.designer.cs souboru:

Vlastnosti podepisování

Podpisové vlastnosti určují, jak je balíček aplikace podepsaný, aby se mohl nainstalovat na zařízení s Androidem. Kvůli rychlejší iteraci sestavení úlohy Xamarin.Android neoznačují balíčky během procesu sestavení, protože podepisování je poměrně pomalé. Místo toho jsou před instalací nebo během exportu podepsané (v případě potřeby) integrovaném vývojovém prostředím nebo cílem instalace sestavení. Vyvolání cíle SignAndroidPackage vytvoří balíček s -Signed.apk příponou ve výstupním adresáři.

Ve výchozím nastavení cíl podepisování vygeneruje v případě potřeby nový podpisový klíč ladění. Pokud chcete použít konkrétní klíč, například na buildovém serveru, použijí se následující vlastnosti nástroje MSBuild:

keytool Mapování možností

Zvažte následující keytool vyvolání:

$ 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]

Pokud chcete použít úložiště klíčů vygenerované výše, použijte skupinu vlastností:

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

Body rozšíření sestavení

Buildový systém Xamarin.Android zveřejňuje několik veřejných bodů rozšíření pro uživatele, kteří chtějí připojit se k našemu procesu sestavení. Chcete-li použít jeden z těchto rozšiřujících bodů, budete muset přidat vlastní cíl do příslušné vlastnosti MSBuild v objektu PropertyGroup. Příklad:

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

Mezi rozšiřující body patří:

Upozornění na rozšíření procesu sestavení: Pokud není správně napsané, rozšíření sestavení můžou ovlivnit výkon sestavení, zejména pokud běží na každém sestavení. Před implementací těchto rozšíření důrazně doporučujeme přečíst si dokumentaci nástroje MSBuild.

Definice cílů

Části procesu sestavení specifické pro Xamarin.Android jsou definovány v $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets, ale k sestavení sestavení se vyžadují také běžné cíle specifické pro jazyk, jako je Microsoft.CSharp.targets .

Před importem libovolných cílů jazyka musí být nastaveny následující vlastnosti sestavení:

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

Všechny tyto cíle a vlastnosti je možné zahrnout do C# importem Xamarin.Android.CSharp.targets:

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

Tento soubor lze snadno přizpůsobit pro jiné jazyky.