Buildelemente
Buildelemente steuern, wie ein .NET für Android-Anwendungs- oder Bibliotheksprojekt erstellt wird.
Sie werden in der Projektdatei angegeben, z . B. MyApp.csproj, innerhalb einer MSBuild ItemGroup.
Hinweis
In .NET für Android gibt es technisch keinen Unterschied zwischen einer Anwendung und einem Bindungsprojekt, sodass Buildelemente in beiden funktionieren. In der Praxis wird dringend empfohlen, separate Anwendungs- und Bindungsprojekte zu erstellen. Buildelemente, die in erster Linie in Bindungen projekten verwendet werden, werden im Referenzhandbuch für MSBuild-Bindungen für Projektelemente dokumentiert.
AndroidAdditionalJavaManifest
<AndroidAdditionalJavaManifest>
wird in Verbindung mit der Java-Abhängigkeitsauflösung verwendet, um zusätzliche POM-Dateien anzugeben, die zum Überprüfen von Abhängigkeiten erforderlich sind.
Dies sind häufig übergeordnete oder importierte POM-Dateien, auf die von der POM-Datei einer Java-Bibliothek verwiesen wird.
<ItemGroup>
<AndroidAdditionalJavaManifest Include="mylib-parent.pom" JavaArtifact="com.example:mylib-parent" JavaVersion="1.0.0" />
</ItemGroup>
Die folgenden MSBuild-Metadaten sind erforderlich:
%(JavaArtifact)
: Die Gruppen- und Artefakt-ID der Java-Bibliothek, die der angegebenen POM-Datei im Formular{GroupId}:{ArtifactId}
entspricht.%(JavaVersion)
: Die Version der Java-Bibliothek, die der angegebenen POM-Datei entspricht.
Weitere Details finden Sie in der Dokumentation zur Java-Abhängigkeitsauflösung.
Diese Buildaktion wurde in .NET 9 eingeführt.
AndroidAsset
Unterstützt Android-Ressourcen, also Dateien, die in einem Java-Android-Projekt im Ordner assets
gespeichert werden.
Ab .NET 9 unterstützt die @(AndroidAsset)
Buildaktion auch zusätzliche Metadaten zum Generieren von Asset Packs. Die %(AndroidAsset.AssetPack)
Metadaten können verwendet werden, um automatisch ein Objektpaket mit diesem Namen zu generieren. Dieses Feature wird nur unterstützt, wenn die $(AndroidPackageFormat)
Einstellung auf .aab
. Das folgende Beispiel platziert movie2.mp4
und movie3.mp4
in separaten Bestandspaketen.
<ItemGroup>
<AndroidAsset Update="Asset/movie.mp4" />
<AndroidAsset Update="Asset/movie2.mp4" AssetPack="assets1" />
<AndroidAsset Update="Asset/movie3.mp4" AssetPack="assets2" />
</ItemGroup>
Dieses Feature kann verwendet werden, um große Dateien in Ihre Anwendung einzuschließen, die normalerweise die maximalen Grenzwerte für die Paketgröße von Google Play überschreiten würden.
Wenn Sie über eine große Anzahl von Ressourcen verfügen, ist es möglicherweise effizienter, das base
Asset Pack zu nutzen.
In diesem Szenario aktualisieren Sie ALLE Objekte in einem einzelnen Objektpaket, und verwenden Sie dann die AssetPack="base"
Metadaten, um zu deklarieren, welche bestimmten Ressourcen in der Basisabdatei enden. Damit können Sie mithilfe von Wildcards die meisten Ressourcen in das Bestandspaket verschieben.
<ItemGroup>
<AndroidAsset Update="Assets/*" AssetPack="assets1" />
<AndroidAsset Update="Assets/movie.mp4" AssetPack="base" />
<AndroidAsset Update="Assets/some.png" AssetPack="base" />
</ItemGroup>
In diesem Beispiel movie.mp4
endet base
die some.png
aab-Datei, während alle anderen Ressourcen im assets1
Bestandspaket enden.
Die zusätzlichen Metadaten werden nur unter .NET für Android 9 und höher unterstützt.
AndroidAarLibrary
Die Buildaktion von AndroidAarLibrary
sollte verwendet werden, um direkt auf .aar
-Dateien zu verweisen. Diese Buildaktion wird am häufigsten von Xamarin-Komponenten verwendet. Um Verweise auf Dateien einzuschließen .aar
, die erforderlich sind, um Google Play und andere Dienste funktionieren zu lassen.
Dateien mit dieser Buildaktion werden ähnlich behandelt wie die eingebetteten Ressourcen in Bibliotheksprojekten. Die .aar
-Datei wird in das Zwischenverzeichnis extrahiert. Danach werden Objekte, Ressourcen und .jar
-Dateien in die entsprechenden Elementgruppen eingefügt.
AndroidAotProfile
Wird zur Bereitstellung eines AOT-Profils zur Verwendung mit einem profilgesteuerten AOT verwendet.
Dieses Element kann auch in Visual Studio verwendet werden, indem die Buildaktion AndroidAotProfile
auf eine Datei mit einem AOT-Profil festgelegt wird.
AndroidAppBundleMetaDataFile
Gibt eine Datei an, die als Metadaten im Android-App-Bundle enthalten sein wird.
Das Format des Flagwerts ist <bundle-path>:<physical-file>
der bundle-path
Ort, an dem der Dateispeicherort im Metadatenverzeichnis des App Bundles angegeben ist und physical-file
eine vorhandene Datei mit den zu speichernden Rohdaten ist.
<ItemGroup>
<AndroidAppBundleMetaDataFile
Include="com.android.tools.build.obfuscation/proguard.map:$(OutputPath)mapping.txt"
/>
</ItemGroup>
Weitere Details finden Sie in der Bundletool-Dokumentation .
AndroidBoundLayout
Gibt an, dass für die Layoutdatei CodeBehind generiert werden soll, falls die $(AndroidGenerateLayoutBindings)
Eigenschaft auf false
". In allen anderen Aspekten ist es identisch mit AndroidResource
.
Diese Aktion kann nur mit Layoutdateien verwendet werden:
<AndroidBoundLayout Include="Resources\layout\Main.axml" />
AndroidEnvironment
Dateien mit einer Buildaktion von AndroidEnvironment
werden verwendet, um Umgebungsvariablen und Systemeigenschaften während des Prozessstarts zu initialisieren.
Die Buildaktion AndroidEnvironment
kann auf mehrere Dateien angewendet werden. Diese werden in keiner bestimmten Reihenfolge ausgewertet (geben Sie daher nicht die gleiche Umgebungsvariable oder Systemeigenschaft in mehreren Dateien an).
AndroidGradleProject
<AndroidGradleProject>
kann verwendet werden, um die Ausgaben von Android Gradle-Projekten zu erstellen und zu nutzen, die in Android Studio oder sonstwehere erstellt wurden.
Die Include
Metadaten sollten auf die oberste Ebene build.gradle
oder build.gradle.kts
Datei verweisen, die zum Erstellen des Projekts verwendet wird. Dies befindet sich im Stammverzeichnis Ihres Gradle-Projekts, das auch Wrapperskripts enthalten gradlew
sollte.
<ItemGroup>
<AndroidGradleProject Include="path/to/project/build.gradle.kts" ModuleName="mylibrary" />
</ItemGroup>
Die folgenden MSBuild-Metadaten werden unterstützt:
%(Configuration)
: Der Name der Konfiguration, die zum Erstellen oder Zusammenstellen des angegebenen Projekt- oder Projektmoduls verwendet werden soll. Der Standardwert istRelease
.%(ModuleName)
: Der Name des Moduls oder Teilprojekts , das erstellt werden soll. Der Standardwert ist leer.%(OutputPath)
: Kann so festgelegt werden, dass der Buildausgabepfad des Gradle-Projekts außer Kraft gesetzt wird. Der Standardwert ist$(IntermediateOutputPath)gradle/%(ModuleName)%(Configuration)-{Hash}
.%(CreateAndroidLibrary)
: Ausgabe-AAR-Dateien werden dem Projekt hinzugefügtAndroidLibrary
. Metadaten, die von<AndroidLibrary>
"Gefällt mir"%(Bind)
unterstützt werden, oder%(Pack)
werden weitergeleitet, wenn diese festgelegt sind. Der Standardwert isttrue
.
Diese Buildaktion wurde in .NET 9 eingeführt.
AndroidJavaLibrary
Dateien mit einer Buildaktion AndroidJavaLibrary
sind Java Archives ( .jar
Dateien), die im endgültigen Android-Paket enthalten sein werden.
AndroidIgnoredJavaDependency
<AndroidIgnoredJavaDependency>
wird in Verbindung mit der Java-Abhängigkeitsauflösung verwendet.
Es wird verwendet, um eine Java-Abhängigkeit anzugeben, die ignoriert werden soll. Dies kann verwendet werden, wenn eine Abhängigkeit so erfüllt wird, dass die Java-Abhängigkeitsauflösung nicht erkannt werden kann.
<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
<AndroidIgnoredJavaDependency Include="com.google.errorprone:error_prone_annotations" Version="2.15.0" />
</ItemGroup>
Die folgenden MSBuild-Metadaten sind erforderlich:
%(Version)
: Die Version der Java-Bibliothek, die dem angegebenen%(Include)
entspricht.
Weitere Details finden Sie in der Dokumentation zur Java-Abhängigkeitsauflösung.
Diese Buildaktion wurde in .NET 9 eingeführt.
AndroidJavaSource
Dateien mit einer Buildaktion AndroidJavaSource
sind Java-Quellcode, der im endgültigen Android-Paket enthalten sein wird.
Ab .NET 7 verfügen alle **\*.java
Dateien im Projektverzeichnis automatisch über eine Buildaktion von AndroidJavaSource
und werden vor dem Assemblybuild gebunden. Ermöglicht C#-Code die einfache Verwendung von Typen und Elementen, die in den **\*.java
Dateien vorhanden sind.
Legen Sie %(AndroidJavaSource.Bind)
diesen Wert auf "False" fest, um dieses Verhalten zu deaktivieren.
AndroidLibrary
AndroidLibrary ist eine neue Buildaktion, die das Einschließen von .jar
- und .aar
-Dateien in Projekte vereinfacht.
In jedem Projekt kann Folgendes angegeben werden:
<ItemGroup>
<AndroidLibrary Include="foo.jar" />
<AndroidLibrary Include="bar.aar" />
</ItemGroup>
Das Ergebnis des obigen Codeausschnitts hat für jeden .NET für Android-Projekttyp einen anderen Effekt:
- Anwendungs- und Klassenbibliotheksprojekte:
foo.jar
ist AndroidJavaLibrary zugeordnet.bar.aar
ist AndroidAarLibrary zugeordnet.
- Java-Bindungsprojekte:
foo.jar
ist EmbeddedJar zugeordnet.foo.jar
ist EmbeddedReferenceJar zugeordnet, wenn die MetadatenBind="false"
hinzugefügt werden.bar.aar
ist LibraryProjectZip zugeordnet.
Durch diese Vereinfachung können Sie AndroidLibrary überall verwenden.
AndroidLintConfig
Die Buildaktion AndroidLintConfig sollte in Verbindung mit der -Eigenschaft verwendet werden.$(AndroidLintEnabled)
-Eigenschaft. Dateien mit dieser Buildaktion werden zusammengeführt und an die Android-lint
-Tools übergeben. Sie sollten XML-Dateien sein, die Informationen zu Tests enthalten, um sie zu aktivieren und zu deaktivieren.
Weitere Details finden Sie in der Lint-Dokumentation.
AndroidManifestOverlay
Die AndroidManifestOverlay
Buildaktion kann verwendet werden, um Dateien für das Manifestzusammenführungstool bereitzustellenAndroidManifest.xml
.
Dateien mit dieser Buildaktion werden zusammen mit den Hauptdatei AndroidManifest.xml
- und Manifestdateien aus Verweisen an die Manifestzusammenführung übergeben. Diese Dateien werden dann im endgültigen Manifest zusammengeführt.
Sie können diese Buildaktion verwenden, um Je nach Buildkonfiguration Änderungen und Einstellungen für Ihre App bereitzustellen. Wenn Sie z. B. eine bestimmte Berechtigung nur beim Debuggen benötigen, können Sie diese durch die Überlagerung beim Debuggen einfügen. Bei einer Überlagerungsdatei mit dem folgenden Inhalt:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.CAMERA" />
</manifest>
Sie können folgendes verwenden, um ein Manifestüberlagerung für einen Debugbuild hinzuzufügen:
<ItemGroup>
<AndroidManifestOverlay Include="DebugPermissions.xml" Condition=" '$(Configuration)' == 'Debug' " />
</ItemGroup>
AndroidInstallModules
Gibt die Module an, die beim Installieren von App-Bündeln durch den Bundletool-Befehl installiert werden.
AndroidMavenLibrary
<AndroidMavenLibrary>
ermöglicht die Angabe eines Maven-Artefakts, das automatisch heruntergeladen und einem .NET für Android-Bindungsprojekt hinzugefügt wird.
Dies kann hilfreich sein, um die Wartung von .NET für Android-Bindungen für Artefakte zu vereinfachen, die in Maven gehostet werden.
<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
<AndroidMavenLibrary Include="com.squareup.okhttp3:okhttp" Version="4.9.3" />
</ItemGroup>
Die folgenden MSBuild-Metadaten werden unterstützt:
%(Version)
: Erforderliche Version der Java-Bibliothek, auf die verwiesen wird.%(Include)
%(Repository)
: Optionales Maven-Repository, das verwendet werden soll. Unterstützte Werte sindCentral
(Standard),Google
oder einehttps
URL zu einem Maven-Repository.
Das <AndroidMavenLibrary>
Element wird übersetzt AndroidLibrary
, sodass alle metadaten, die von <AndroidLibrary>
"Gefällt %(Bind)
mir" unterstützt werden oder %(Pack)
auch unterstützt werden.
Weitere Details finden Sie in der AndroidMavenLibrary-Dokumentation .
Diese Buildaktion wurde in .NET 9 eingeführt.
AndroidNativeLibrary
Native Bibliotheken werden dem Build hinzugefügt, indem ihre Buildaktion auf AndroidNativeLibrary
festgelegt wird.
Da Android mehrere Application Binary Interfaces (ABIs) unterstützt, muss das Buildsystem wissen, für welche ABI die systemeigene Bibliothek erstellt wurde. Es gibt zwei Möglichkeiten, wie die ABI angegeben werden kann:
- Pfadermittlung.
- Verwenden der
%(Abi)
Elementmetadaten.
Bei der Pfadermittlung wird der Name des übergeordneten Verzeichnisses der nativen Bibliothek verwendet, um die ABI anzugeben, die die Bibliothek als Ziel verwendet. Wenn Sie dem Build also lib/armeabi-v7a/libfoo.so
hinzufügen, wird die ABI als armeabi-v7a
„ermittelt“.
Element-Attributname
Abi – Gibt die ABI der nativen Bibliothek an.
<ItemGroup>
<AndroidNativeLibrary Include="path/to/libfoo.so">
<Abi>armeabi-v7a</Abi>
</AndroidNativeLibrary>
</ItemGroup>
AndroidPackagingOptionsExclude
Eine Reihe von dateikompatiblen Elementen, die es ermöglichen, dass Elemente aus dem endgültigen Paket ausgeschlossen werden. Die Standardwerte sind wie folgt:
<ItemGroup>
<AndroidPackagingOptionsExclude Include="DebugProbesKt.bin" />
<AndroidPackagingOptionsExclude Include="$([MSBuild]::Escape('*.kotlin_*')" />
</ItemGroup>
Elemente können Datei-BLOB-Zeichen für Wildcards wie *
z. B. und ?
.
Diese Elemente müssen jedoch URL-codiert oder verwendet $([MSBuild]::Escape(''))
werden.
Dies ist so, dass MSBuild sie nicht als tatsächliche Datei-Wildcards interpretiert.
Beispiel:
<ItemGroup>
<AndroidPackagingOptionsExclude Include="%2A.foo_%2A" />
<AndroidPackagingOptionsExclude Include="$([MSBuild]::Escape('*.foo')" />
</ItemGroup>
HINWEIS: *
, ?
und .
wird in der BuildApk
Aufgabe durch die entsprechenden Datei-Globs ersetzt.
Wenn die Standarddatei glob zu restriktiv ist, können Sie sie entfernen, indem Sie Folgendes zu Ihrem csproj hinzufügen.
<ItemGroup>
<AndroidPackagingOptionsExclude Remove="$([MSBuild]::Escape('*.kotlin_*')" />
</ItemGroup>
In .NET 7 hinzugefügt.
AndroidPackagingOptionsInclude
Eine Reihe von dateikompatiblen Elementen, mit denen Elemente aus dem endgültigen Paket eingeschlossen werden können. Die Standardwerte sind wie folgt:
<ItemGroup>
<AndroidPackagingOptionsInclude Include="$([MSBuild]::Escape('*.kotlin_builtins')" />
</ItemGroup>
Elemente können Datei-BLOB-Zeichen für Wildcards wie *
z. B. und ?
.
Diese Elemente müssen jedoch die URL-Codierung oder "$([MSBuild]::Escape(')")" verwenden.
Dies ist so, dass MSBuild sie nicht als tatsächliche Datei-Wildcards interpretiert.
Beispiel:
<ItemGroup>
<AndroidPackagingOptionsInclude Include="%2A.foo_%2A" />
<AndroidPackagingOptionsInclude Include="$([MSBuild]::Escape('*.foo')" />
</ItemGroup>
HINWEIS: *
, ?
und .
wird in der BuildApk
Aufgabe durch die entsprechenden Datei-Globs ersetzt.
In .NET 9 hinzugefügt.
AndroidResource
Alle Dateien mit einer AndroidResource-Buildaktion werden während des Buildprozesses in Android-Ressourcen kompiliert und über $(AndroidResgenFile)
zugänglich gemacht.
<ItemGroup>
<AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>
Fortgeschrittene Benutzer wünschen sich vielleicht, dass verschiedene Ressourcen in verschiedenen Konfigurationen, aber mit demselben effektiven Pfad verwendet werden. Dies kann erreicht werden, indem mehrere Ressourcenverzeichnisse und Dateien mit den gleichen relativen Pfaden innerhalb dieser verschiedenen Verzeichnisse vorhanden sind und MSBuild-Bedingungen verwendet werden, um bedingt verschiedene Dateien in verschiedenen Konfigurationen einzubinden. Zum Beispiel:
<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 – Gibt den Ressourcenpfad explizit an. Ermöglicht "Aliasing"-Dateien, sodass sie als mehrere unterschiedliche Ressourcennamen verfügbar sind.
<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>
Inhalt
Die normale Content
-Buildaktion wird nicht unterstützt (da wir noch nicht herausgefunden haben, wie wir sie ohne einen möglicherweise kostspieligen ersten Ausführungsschritt unterstützen können).
Wenn Sie versuchen, die @(Content)
Build-Aktion zu verwenden, wird eine XA0101-Warnung angezeigt.
EmbeddedJar
In einem .NET für Android-Bindungsprojekt bindet die EmbeddedJar-Buildaktion die Java/Kotlin-Bibliothek und bettet die .jar
Datei in die Bibliothek ein. Wenn ein .NET für Android-Anwendungsprojekt die Bibliothek nutzt, hat es Zugriff auf die Java/Kotlin-APIs von C# sowie den Java/Kotlin-Code in die endgültige Android-Anwendung.
Sie sollten stattdessen die AndroidLibrary-Buildaktion als Alternative verwenden, z. B.:
<Project>
<ItemGroup>
<AndroidLibrary Include="Library.jar" />
</ItemGroup>
</Project>
EmbeddedNativeLibrary
In einer .NET für Android-Klassenbibliothek oder einem Java-Bindungsprojekt bündelt das EmbeddedNativeLibrary-Buildaktion eine systemeigene Bibliothek, z lib/armeabi-v7a/libfoo.so
. B. in der Bibliothek. Wenn eine .NET für Android-Anwendung die Bibliothek nutzt, wird die libfoo.so
Datei in die endgültige Android-Anwendung aufgenommen.
Sie können die AndroidNativeLibrary-Buildaktion als Alternative verwenden.
EmbeddedReferenceJar
In einem .NET für Android-Bindungsprojekt bettet die EmbeddedReferenceJar-Buildaktion die Datei in die .jar
Bibliothek ein, erstellt aber keine C#-Bindung wie EmbeddedJar. Wenn ein .NET für Android-Anwendungsprojekt die Bibliothek nutzt, enthält es den Java/Kotlin-Code in die endgültige Android-Anwendung.
Sie können die AndroidLibrary-Buildaktion als Alternative wie <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
In einem .NET für Android-Bindungsprojekt wird die JavaSourceJar-Buildaktion für .jar
Dateien verwendet, die Java-Quellcode enthalten, die Javadoc-Dokumentationskommentare enthalten.
Javadoc wird stattdessen in C#-XML-Dokumentationskommentare im generierten Bindungsquellcode konvertiert.
$(AndroidJavadocVerbosity)
steuert, wie ausführlich oder vollständig die importierten Javadoc-Kommentare sind.
Die folgenden MSBuild-Metadaten werden unterstützt:
%(CopyrightFile)
: Hiermit wird ein Pfad zu einer Datei angegeben, die Copyrightinformationen für die Javadoc-Inhalte enthält, die an sämtliche importierte Dokumentation angefügt werden.%(UrlPrefix)
: Hiermit wird ein URL-Präfix zur Unterstützung einer Verlinkung auf die Onlinedokumentation in der importierten Dokumentation angegeben.%(UrlStyle)
: Hiermit wird der „Stil“ der URLs angegeben, die für die Verlinkung auf die Onlinedokumentation generiert werden sollen. Derzeit wird nur ein Stil unterstützt:developer.android.com/reference@2020-Nov
.%(DocRootUrl)
: Ein URL-Präfix, das anstelle aller{@docroot}
Instanzen in der importierten Dokumentation verwendet werden soll.
LibraryProjectZip
Die LibraryProjectZip-Buildaktion bindet die Java/Kotlin-Bibliothek und bettet die .zip
Datei .aar
in die Bibliothek ein. Wenn ein .NET für Android-Anwendungsprojekt die Bibliothek nutzt, hat es Zugriff auf die Java/Kotlin-APIs von C# sowie den Java/Kotlin-Code in die endgültige Android-Anwendung.
LinkDescription
Dateien mit einer LinkDescription-Buildaktion werden verwendet, um das Verhalten des Linkers zu steuern.
ProguardConfiguration
Dateien mit einer ProguardConfiguration-Buildaktion enthalten Optionen, mit denen das Verhalten von proguard
gesteuert werden kann. Weitere Informationen zu dieser Buildaktion finden Sie unter ProGuard.
Diese Dateien werden ignoriert, sofern die MSBuild-Eigenschaft $(EnableProguard)
MSBuild-Eigenschaft ist True
.