Sdílet prostřednictvím


Sestavovací položky

Položky sestavení určují, jak se sestaví projekt aplikace nebo knihovny .NET pro Android.

Zadají se v souboru projektu, například MyApp.csproj, v rámci MSBuild ItemGroup.

Poznámka:

V .NET pro Android není technicky žádný rozdíl mezi aplikací a projektem vazeb, takže položky sestavení budou fungovat v obou. V praxi se důrazně doporučuje vytvářet samostatné projekty aplikací a vazeb. Položky sestavení, primárně používané v projektech vazeb, jsou zdokumentovány v referenční příručce položky projektu MSBuild pro vazby.

Android Další Java Manifest

<AndroidAdditionalJavaManifest> se používá ve spojení s řešením závislostí Java k určení dalších souborů POM, které budou potřeba k ověření závislostí. Často se jedná o nadřazené nebo importované soubory POM, na které odkazuje soubor POM knihovny Java.

<ItemGroup>
  <AndroidAdditionalJavaManifest Include="mylib-parent.pom" JavaArtifact="com.example:mylib-parent" JavaVersion="1.0.0" />
</ItemGroup>

Jsou vyžadována následující metadata nástroje MSBuild:

  • %(JavaArtifact): Skupina a ID artefaktu knihovny Java odpovídající specifikovanému souboru POM ve formátu {GroupId}:{ArtifactId}.
  • %(JavaVersion): Verze knihovny Java odpovídající zadanému souboru POM.

Další podrobnosti najdete v dokumentaci k řešení závislostí Java .

Tato akce sestavení byla zavedena v .NET 9.

AndroidAsset

Podporuje Android Assets, soubory, které by byly zahrnuty do assets složky v projektu Java Android.

Počínaje verzí .NET 9 akce sestavení @(AndroidAsset) také podporuje další metadata pro generování Asset Packs. Metadata %(AndroidAsset.AssetPack) lze použít k automatickému vygenerování balíčku prostředků stejného názvu. Tato funkce je podporována pouze v případě, že je $(AndroidPackageFormat) nastavena na hodnotu .aab. Následující příklad umístí movie2.mp4 a movie3.mp4 do samostatných balíčků prostředků.

<ItemGroup>
   <AndroidAsset Update="Asset/movie.mp4" />
   <AndroidAsset Update="Asset/movie2.mp4" AssetPack="assets1" />
   <AndroidAsset Update="Asset/movie3.mp4" AssetPack="assets2" />
</ItemGroup>

Tuto funkci můžete použít k zahrnutí velkých souborů do aplikace, které by normálně překročily maximální limity velikosti balíčku Google Play.

Pokud máte velký počet prostředků, může být efektivnější využít base balíček prostředků. V tomto scénáři aktualizujete všechny prostředky tak, aby byly v jednom balíčku prostředků, a pak pomocí AssetPack="base" metadat deklarujte, které konkrétní prostředky končí v základním souboru aab. Pomocí těchto zástupných znaků můžete přesunout většinu prostředků do balíčku prostředků.

<ItemGroup>
   <AndroidAsset Update="Assets/*" AssetPack="assets1" />
   <AndroidAsset Update="Assets/movie.mp4" AssetPack="base" />
   <AndroidAsset Update="Assets/some.png" AssetPack="base" />
</ItemGroup>

V tomto příkladu movie.mp4 a some.png skončí v souboru base aab, zatímco všechny ostatní zdroje skončí v balíčku assets1 zdrojů.

Další metadata jsou podporována pouze v .NET pro Android 9 a novější.

AndroidAarLibrary

Akce AndroidAarLibrary sestavení by se měla použít k přímému odkazování .aar na soubory. Tato akce sestavení bude nejčastěji používána komponentami Xamarin. Konkrétně zahrnout odkazy na .aar soubory, které jsou nutné k tomu, aby Google Play a další služby fungovaly.

Soubory s touto akcí sestavení budou zpracovány podobným způsobem jako vložené prostředky nalezené v knihovních projektech. Extrahuje .aar se do zprostředkujícího adresáře. Pak se jakákoli aktiva, prostředky a .jar soubory zahrnou do příslušných skupin položek.

AndroidAotProfile

Používá se k poskytnutí profilu AOT pro použití s profilem řízeným AOT.

Dá se také použít z aplikace Visual Studio nastavením AndroidAotProfile akce sestavení na soubor obsahující profil AOT.

AndroidAppBundleMetaDataFile

Určuje soubor, který bude součástí sady aplikací pro Android jako metadata. Formát hodnoty příznaku je <bundle-path>:<physical-file> místo, kde bundle-path označuje umístění souboru v adresáři metadat sady aplikací a physical-file je existující soubor obsahující nezpracovaná data, která se mají uložit.

<ItemGroup>
  <AndroidAppBundleMetaDataFile
    Include="com.android.tools.build.obfuscation/proguard.map:$(OutputPath)mapping.txt"
  />
</ItemGroup>

Další podrobnosti najdete v dokumentaci k nástroji bundletool .

AndroidBoundLayout

Označuje, že soubor rozložení má mít pro něj vygenerovaný code-behind v případě, že je vlastnost $(AndroidGenerateLayoutBindings) nastavena na false hodnotu. Ve všech ostatních aspektech je stejný jako AndroidResource.

Tuto akci lze použít pouze se soubory rozložení:

<AndroidBoundLayout Include="Resources\layout\Main.axml" />

AndroidEnvironment

Soubory s akcí AndroidEnvironment sestavení se používají k inicializaci proměnných prostředí a systémových vlastností během spouštění procesu. AndroidEnvironment Akce Sestavení se může použít u více souborů a vyhodnotí se v žádném konkrétním pořadí (proto nezadávejte stejnou proměnnou prostředí nebo systémovou vlastnost ve více souborech).

AndroidGradleProject

<AndroidGradleProject> lze použít k sestavení a využívání výstupů projektů Android Gradle vytvořených v Android Studio nebo jinde.

Metadata Include by měla odkazovat na nejvyšší úroveň build.gradle nebo build.gradle.kts soubor, který se použije k sestavení projektu. Najdete ho v kořenovém adresáři projektu Gradle, který by měl také obsahovat obálkové skripty.

<ItemGroup>
  <AndroidGradleProject Include="path/to/project/build.gradle.kts" ModuleName="mylibrary" />
</ItemGroup>

Podporují se následující metadata nástroje MSBuild:

  • %(Configuration): Název konfigurace, která se má použít k sestavení nebo montáži uvedeného projektu nebo jeho modulu. Výchozí hodnota je Release.
  • %(ModuleName): Název modulu nebo dílčího projektu , který by se měl sestavit. Výchozí hodnota je prázdná.
  • %(OutputPath): Lze nastavit tak, aby přepsala výstupní cestu sestavení projektu Gradle. Výchozí hodnota je $(IntermediateOutputPath)gradle/%(ModuleName)%(Configuration)-{Hash}.
  • %(CreateAndroidLibrary): Výstupní soubory AAR budou přidány jako AndroidLibrary projektu. Metadata podporovaná jako <AndroidLibrary>, %(Bind) nebo %(Pack) se přeposílají, pokud jsou nastavena. Výchozí hodnota je true.

Tato akce sestavení byla zavedena v .NET 9.

AndroidJavaLibrary

Soubory s akcí sestavení AndroidJavaLibrary jsou archivy Java (soubory .jar), které budou zahrnuty do konečného Android balíčku.

AndroidIgnoredJavaDependency (Java Závislost Ignorovaná Androidem)

<AndroidIgnoredJavaDependency> se používá ve spojení s řešením závislostí Java.

Slouží k určení závislosti v Javě, která by se měla ignorovat. To se dá použít, pokud bude závislost splněna způsobem, který nedokáže rozpoznat rozlišení závislostí v Javě.

<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidIgnoredJavaDependency Include="com.google.errorprone:error_prone_annotations" Version="2.15.0" />
</ItemGroup>

Jsou vyžadována následující metadata nástroje MSBuild:

  • %(Version): Verze knihovny Java odpovídající zadanému %(Include).

Další podrobnosti najdete v dokumentaci k řešení závislostí Java .

Tato akce sestavení byla zavedena v .NET 9.

AndroidJavaSource

Soubory s akcí sestavení AndroidJavaSource jsou zdrojové kódy Java, které budou součástí konečného balíčku Android.

Počínaje rozhraním .NET 7, mají všechny **\*.java soubory v adresáři projektu automaticky akci AndroidJavaSource Sestavení a budou zahrnuty před sestavením. Umožňuje kódu jazyka C# snadno používat typy a členy, které jsou přítomné v souborech **\*.java .

Pokud chcete toto chování zakázat, nastavte %(AndroidJavaSource.Bind) na hodnotu False.

AndroidLibrary

AndroidLibrary je nová akce sestavení, která zjednodušuje způsob zahrnutí souborů .jar a .aar do projektů.

Libovolný projekt může zadat:

<ItemGroup>
  <AndroidLibrary Include="foo.jar" />
  <AndroidLibrary Include="bar.aar" />
</ItemGroup>

Výsledek výše uvedeného fragmentu kódu má jiný účinek pro každý typ projektu .NET pro Android:

Toto zjednodušení znamená, že androidLibrary můžete používat všude.

AndroidLintConfig

Akce sestavení 'AndroidLintConfig' by měla být použita ve spojení s akcí $(AndroidLintEnabled) vlastnost. Soubory s touto akcí kompilace se sloučí a předají do nástrojů Android lint. Měly by se jednat o soubory XML obsahující informace o testech, které se mají povolit a zakázat.

Další podrobnosti najdete v dokumentaci lint .

AndroidManifestOverlay

Akci AndroidManifestOverlay sestavení lze použít k tomu, aby poskytla soubory AndroidManifest.xml nástroji Manifest Merger. Soubory s touto akcí sestavení budou předány nástroji Manifest Merger společně s hlavním AndroidManifest.xml souborem a manifestovými soubory z odkazů. Ty se pak sloučí do konečného manifestu.

Tuto akci sestavení můžete použít ke změnám a nastavením aplikace v závislosti na její konfiguraci sestavení. Pokud například potřebujete mít konkrétní oprávnění pouze při ladění, můžete toto oprávnění vložit pomocí překrytí při ladění. Například s následujícím obsahem překryvného souboru:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-permission android:name="android.permission.CAMERA" />
</manifest>

K přidání manifestového překrytí pro účely ladění můžete použít následující:

<ItemGroup>
  <AndroidManifestOverlay Include="DebugPermissions.xml" Condition=" '$(Configuration)' == 'Debug' " />
</ItemGroup>

AndroidInstallModules

Určuje moduly, které se nainstalují příkazem bundletool při instalaci sad aplikací.

AndroidMavenLibrary

<AndroidMavenLibrary> umožňuje zadat artefakt Mavenu, který se automaticky stáhne a přidá do projektu vazby .NET pro Android. To může být užitečné ke zjednodušení údržby vazeb .NET pro Android pro artefakty hostované v Mavenu.

<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidMavenLibrary Include="com.squareup.okhttp3:okhttp" Version="4.9.3" />
</ItemGroup>

Podporují se následující metadata nástroje MSBuild:

  • %(Version): Požadovaná verze knihovny Java, na kterou %(Include)odkazuje .
  • %(Repository): Volitelné úložiště Maven, které se má použít. Podporované hodnoty jsou Central (výchozí) Googlenebo https adresa URL úložiště Maven.

Položka <AndroidMavenLibrary> se přeloží do AndroidLibrary, takže všechna metadata podporovaná <AndroidLibrary> tímto způsobem %(Bind) nebo %(Pack) jsou také podporována.

Další podrobnosti najdete v dokumentaci k AndroidMavenLibrary .

Tato akce sestavení byla zavedena v .NET 9.

AndroidNativeLibrary

Nativní knihovny se přidají do sestavení nastavením akce sestavení na AndroidNativeLibrary.

Všimněte si, že vzhledem k tomu, že Android podporuje více binárních rozhraní aplikací (ABI), musí systém sestavení znát ABI nativní knihovnu, pro kterou je sestavena. Existují dva způsoby, jak lze zadat ABI:

  1. Cesta "sniffingu".
  2. Použití metadat položky %(Abi)

Při sniffingu cesty se k určení ABI, na které knihovna cílí, používá název nadřazeného adresáře nativní knihovny. Pokud tedy přidáte lib/armeabi-v7a/libfoo.so do sestavení, ABI bude "detekováno" jako armeabi-v7a.

Název atributu položky

Abi – Určuje ABI nativní knihovny.

<ItemGroup>
  <AndroidNativeLibrary Include="path/to/libfoo.so">
    <Abi>armeabi-v7a</Abi>
  </AndroidNativeLibrary>
</ItemGroup>

AndroidNativeLibraryNoJniPreload

Každá nativní knihovna, která je součástí této skupiny položek, bude vyloučena z mechanismu předběžného načtení knihovny JNI. Ve výchozím nastavení budou všechny tyto knihovny načteny modulem runtime v rané fázi spouštění aplikace, aby se zajistila jejich správná inicializace. V některých případech to ale nemusí být požadované chování a tato skupina položek umožňuje vyloučení knihoven z tohoto procesu jednotlivě.

Některé knihovny architektury, které musí být načteny při spuštění aplikace, nebudou ovlivněny, pokud jsou zahrnuty do této skupiny položek.

Viz také $(AndroidIgnoreAllJniPreload)

AndroidPackagingOptionsExclude

Sada položek kompatibilních se souborovým globem, které umožní vyloučit položky z konečného balíčku. Výchozí hodnoty jsou následující:

<ItemGroup>
	<AndroidPackagingOptionsExclude Include="DebugProbesKt.bin" />
	<AndroidPackagingOptionsExclude Include="$([MSBuild]::Escape('*.kotlin_*')" />
</ItemGroup>

Položky můžou používat znaky souboru blob pro zástupné znaky, například * a ?. Tyto položky však musí být kódovány jako URL nebo používat $([MSBuild]::Escape('')). Proto MSBuild nepokouší interpretovat je jako skutečné zástupné znaky souborů.

Například

<ItemGroup>
	<AndroidPackagingOptionsExclude Include="%2A.foo_%2A" />
  <AndroidPackagingOptionsExclude Include="$([MSBuild]::Escape('*.foo')" />
</ItemGroup>

POZNÁMKA: *? a . bude nahrazen v BuildApk úkolu příslušnými zástupnými znamény souborů.

Pokud je výchozí maska souboru příliš omezující, můžete ji odebrat přidáním následujícího příkazu do souboru csproj.

<ItemGroup>
	<AndroidPackagingOptionsExclude Remove="$([MSBuild]::Escape('*.kotlin_*')" />
</ItemGroup>

Přidáno v .NET 7.

AndroidPackagingOptionsInclude (zahrnout možnosti balení Android)

Sada položek kompatibilních se souborovým globem, které umožní zahrnout položky z konečného balíčku. Výchozí hodnoty jsou následující:

<ItemGroup>
	<AndroidPackagingOptionsInclude Include="$([MSBuild]::Escape('*.kotlin_builtins')" />
</ItemGroup>

Položky můžou používat znaky objektu blob souboru pro zástupné znaky, například * a ?. Tyto položky však musí používat kódování adresy URL nebo $([MSBuild]::Escape('')). Proto se MSBuild nepokouší je interpretovat jako skutečné zástupné znaky souborů. Například

<ItemGroup>
	<AndroidPackagingOptionsInclude Include="%2A.foo_%2A" />
  <AndroidPackagingOptionsInclude Include="$([MSBuild]::Escape('*.foo')" />
</ItemGroup>

POZNÁMKA: *, ? a . budou nahrazeny v úkolu BuildApk příslušnými vzory souborů.

Přidáno v .NET 9.

AndroidResource

Všechny soubory s akcí sestavení AndroidResource jsou zkompilovány do prostředků Androidu během procesu sestavení a zpřístupněny prostřednictvím $(AndroidResgenFile).

<ItemGroup>
  <AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>

Pokročilejší uživatelé možná budou chtít mít různé prostředky používané v různých konfiguracích, ale se stejnou efektivní cestou. Toho lze dosáhnout pomocí více adresářů prostředků a souborů se stejnými relativními cestami v rámci těchto různých adresářů a podmíněným zahrnutím různých souborů do různých konfigurací pomocí podmínek nástroje MSBuild. Například:

<ItemGroup Condition=" '$(Configuration)' != 'Debug' ">
  <AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>
<ItemGroup  Condition=" '$(Configuration)' == 'Debug' ">
  <AndroidResource Include="Resources-Debug\values\strings.xml"/>
</ItemGroup>
<PropertyGroup>
  <MonoAndroidResourcePrefix>Resources;Resources-Debug</MonoAndroidResourcePrefix>
</PropertyGroup>

LogicalName – Určuje cestu k prostředku explicitně. Povolí vytváření aliasů souborů, aby byly přístupné pod více různými názvy prostředků.

<ItemGroup Condition="'$(Configuration)'!='Debug'">
  <AndroidResource Include="Resources/values/strings.xml"/>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
  <AndroidResource Include="Resources-Debug/values/strings.xml">
    <LogicalName>values/strings.xml</LogicalName>
  </AndroidResource>
</ItemGroup>

Content

Normální Content akce sestavení není podporována (protože jsme nezjistili, jak ji podporovat bez možná nákladného prvního kroku).

Pokus o použití @(Content) akce sestavení způsobí upozornění XA0101 .

EmbeddedJar

V projektu vazby .NET pro Android vytvoří akce sestavení EmbeddedJar vazbu knihovny Java/Kotlin a vloží .jar soubor do knihovny. Když projekt aplikace .NET pro Android využívá knihovnu, bude mít přístup k rozhraním Java/Kotlin API z jazyka C# a do konečné aplikace pro Android bude obsahovat kód Java/Kotlin.

Místo toho byste měli použít akci sestavení AndroidLibrary jako alternativu, například:

<Project>
  <ItemGroup>
    <AndroidLibrary Include="Library.jar" />
  </ItemGroup>
</Project>

EmbeddedNativeLibrary

Akce sestavení EmbeddedNativeLibrary v knihovně tříd .NET pro Android nebo v projektu vazby Java sbalí nativní knihovnu, například lib/armeabi-v7a/libfoo.so do knihovny. Když aplikace .NET pro Android knihovnu využívá, libfoo.so soubor bude součástí konečné aplikace pro Android.

Jako alternativu můžete použít akci sestavení AndroidNativeLibrary .

EmbeddedReferenceJar

V projektu vazby .NET pro Android vloží akce sestavení .jar soubor do knihovny, ale nevytvoří vazbu jazyka C# jako EmbeddedJar. Když projekt aplikace .NET pro Android využívá knihovnu, bude obsahovat kód Java/Kotlin do konečné aplikace pro Android.

Akci sestavení AndroidLibrary můžete použít jako alternativu, například <AndroidLibrary Include="..." Bind="false" />:

<Project>
  <ItemGroup>
    <!-- A .jar file to bind & embed -->
    <AndroidLibrary Include="Library.jar" />
    <!-- A .jar file to only embed -->
    <AndroidLibrary Include="Dependency.jar" Bind="false" />
  </ItemGroup>
</Project>

JavaSourceJar

V projektu vazby .NET pro Android se akce sestavení JavaSourceJar používá u .jar souborů, které obsahují zdrojový kód Java, které obsahují komentáře dokumentace Javadoc.

Javadoc se místo toho převede na komentáře dokumentace jazyka C# XML ve vygenerovaném zdrojovém kódu vazby.

$(AndroidJavadocVerbosity) určuje, jak je importovaný Javadoc „podrobný“ nebo „úplný“.

Podporují se následující metadata nástroje MSBuild:

  • %(CopyrightFile): Cesta k souboru, který obsahuje informace o autorských právech pro obsah Javadoc, který se připojí ke všem importovaným dokumentacím.

  • %(UrlPrefix): Předpona adresy URL pro podporu propojení s online dokumentací v rámci importované dokumentace.

  • %(UrlStyle): Styl adres URL, které se mají generovat při propojení s online dokumentací. V současné době je podporován pouze jeden styl: developer.android.com/reference@2020-Nov.

  • %(DocRootUrl): Předpona adresy URL, která se použije místo všech {@docroot} instancí v importované dokumentaci.

LibraryProjectZip

Akce sestavení LibraryProjectZip sváže knihovnu Java/Kotlin a vloží .zip.aar soubor do knihovny. Když projekt aplikace .NET pro Android využívá knihovnu, bude mít přístup k rozhraním Java/Kotlin API z jazyka C# a do konečné aplikace pro Android bude obsahovat kód Java/Kotlin.

Popis odkazu

Soubory s akcí sestavení LinkDescription slouží k určení chování linkeru.

ProguardConfiguration

Soubory s akcí sestavení ProguardConfiguration obsahují možnosti, které slouží k řízení proguard chování. Další informace o této akci sestavení najdete v tématu ProGuard.

Tyto soubory se ignorují, pokud $(EnableProguard) Vlastnost MSBuild je True.