Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein .NET 8-Projekt für eine .NET für Android-App ähnelt dem folgenden Beispiel:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<OutputType>Exe</OutputType>
</PropertyGroup>
</Project>
Für ein Bibliotheksprojekt lassen Sie die Eigenschaft $(OutputType)
ganz weg oder geben Sie Library
als Eigenschaftswert an.
.NET-Konfigurationsdateien
Konfigurationsdateien wie Foo.dll.config
oder Foo.exe.config
werden in .NET für Android-Projekten nicht unterstützt.
<dllmap>
Konfigurationselemente werden in .NET Core überhaupt nicht unterstützt, und andere Elementtypen für Kompatibilitätspakete wie System.Configuration.ConfigurationManager wurden in Android-Projekten nie unterstützt.
Änderungen an MSBuild-Eigenschaften
Die Eigenschaft $(AndroidSupportedAbis)
sollte nicht verwendet werden:
<PropertyGroup>
<!-- Used in Xamarin.Android projects -->
<AndroidSupportedAbis>armeabi-v7a;arm64-v8a;x86;x86_64</AndroidSupportedAbis>
</PropertyGroup>
Stattdessen sollte die Eigenschaft $(AndroidSupportedAbis)
durch .NET-Laufzeitbezeichner ersetzt werden:
<PropertyGroup>
<!-- Used in .NET for Android projects -->
<RuntimeIdentifiers>android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers>
</PropertyGroup>
Weitere Informationen zu Laufzeitbezeichnern finden Sie unter .NET RID Catalog.
In der folgenden Tabelle sind andere MSBuild-Eigenschaften aufgeführt, die in .NET für Android geändert wurden:
Eigenschaft | Kommentare |
---|---|
$(AndroidUseIntermediateDesignerFile) |
True standardmäßig. |
$(AndroidBoundExceptionType) |
System standardmäßig. Diese Eigenschaft ändert die Arten von Ausnahmen, die von verschiedenen Methoden ausgelöst werden, um eine bessere Anpassung an die .NET-Semantik zu erreichen, was auf Kosten der Kompatibilität mit Xamarin.Android geht. Weitere Informationen finden Sie unter Einige der neuen umhüllten Java-Ausnahmen verwenden BCL-Ausnahmen, die sich von den entsprechenden BCL-Typen unterscheiden. |
$(AndroidClassParser) |
class-parse standardmäßig.
jar2xml wird nicht unterstützt. |
$(AndroidDexTool) |
d8 standardmäßig.
dx wird nicht unterstützt. |
$(AndroidCodegenTarget) |
XAJavaInterop1 standardmäßig.
XamarinAndroid wird nicht unterstützt. |
$(AndroidManifest) |
Standardmäßig wird AndroidManifest.xml im Stammverzeichnis von Projekten verwendet, da Properties\AssemblyInfo.cs in SDK-Projekten nicht mehr verwendet wird.
Properties\AndroidManifest.xml wird ebenfalls erkannt und verwendet, wenn es vorhanden ist, um die Migration zu erleichtern. |
$(DebugType) |
portable standardmäßig.
full und pdbonly werden nicht unterstützt. |
$(MonoSymbolArchive) |
False , da mono-symbolicate nicht unterstützt wird. |
Wenn außerdem die Java-Bindung mit @(InputJar)
, @(EmbeddedJar)
oder @(LibraryProjectZip)
aktiviert ist, wird die Eigenschaft $(AllowUnsafeBlocks)
standardmäßig auf True
gesetzt.
Hinweis
Das Referenzieren eines Android Wear-Projekts aus einer Android-App wird nicht unterstützt.
Änderungen an AndroidManifest.xml
In Xamarin.Android-, Java- und Kotlin-Android-Projekten gibt das <uses-sdk/>
-Element die minimale Android-Version an, die Ihre App unterstützt, sowie die Android-Zielversion, gegen die Ihre App kompiliert wird:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="com.companyname.myapp">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
<application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" />
</manifest>
Weitere Informationen über das <uses-sdk/>
-Element finden Sie in der Android-Dokumentation.
In .NET 8 Android-Apps gibt es MSBuild-Eigenschaften, um diese Werte festzulegen. Die Verwendung der MSBuild-Eigenschaften hat weitere Vorteile. In den meisten Fällen sollte das <uses-sdk/>
-Element zugunsten von Werten in der .csproj
-Datei Ihres Projekts entfernt werden:
<Project>
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
</PropertyGroup>
</Project>
In diesem Beispiel ist net8.0-android
die Kurzform für net8.0-android34.0
. Künftige Versionen von .NET werden die neueste Android-Version verfolgen, die zum Zeitpunkt der .NET-Veröffentlichung verfügbar ist.
TargetFramework
wird android:targetSdkVersion
zugeordnet. Zum Zeitpunkt der Erstellung wird dieser Wert automatisch in das <uses-sdk/>
-Element aufgenommen. Der Vorteil der Verwendung von TargetFramework
auf diese Weise ist, dass Sie die passende C#-Bindung für Android API 34 für net8.0-android34.0
erhalten. Android wird unabhängig vom .NET-Release-Zyklus veröffentlicht, sodass wir die Flexibilität haben, uns für net8.0-android35.0
zu entscheiden, wenn eine Bindung für die nächste Android-Version verfügbar ist.
In ähnlicher Weise wird SupportedOSPlatformVersion
auf android:minSdkVersion
abgebildet. Zum Zeitpunkt der Erstellung wird dieser Wert automatisch in das <uses-sdk/>
-Element aufgenommen. Android-APIs werden mit SupportedOSPlatformAttribute dekoriert, sodass Sie Build-Warnungen für den Aufruf von APIs erhalten, die nur für einige der Android-Versionen verfügbar sind, auf denen Ihre App laufen kann:
error CA1416: This call site is reachable on 'Android' 21.0 and later. `ConnectivityManager.ActiveNetwork` is only supported on: 'Android' 23.0 and later.
Um diese API sicher zu verwenden, können Sie eine höhere SupportedOSPlatformVersion
in Ihrem Projekt deklarieren oder die IsAndroidVersionAtLeast API zur Laufzeit verwenden:
if (OperatingSystem.IsAndroidVersionAtLeast(23))
{
// Use the API here
}
Standardmäßiger Dateieinschluss
Das standardmäßige Globbingverhalten von .NET für Android-Dateien wird in AutoImport.props
definiert. Dieses Verhalten kann für Android-Elemente deaktiviert werden, indem $(EnableDefaultAndroidItems)
auf false
festgelegt wird. Alternativ kann das gesamte standardmäßige Einschlussverhalten von Elementen deaktiviert werden, indem $(EnableDefaultItems)
auf false
festgelegt wird. Weitere Informationen finden Sie unter Workload Props-Dateien.
Laufzeitverhalten
In .NET 5+ gibt es auf verschiedenen Plattformen Änderungen im Verhalten der String.IndexOf()
-Methode. Weitere Informationen finden Sie unter .NET-Globalisierung und ICU.
Linker
.NET 8 verfügt über neue Einstellungen für den Linker:
<PublishTrimmed>true</PublishTrimmed>
-
<TrimMode>partial</TrimMode>
, das Assemblys kürzt, die für die Kürzung angemeldet wurden.
Weitere Informationen finden Sie unter Kürzungsoptionen.
In .NET für Android-Projekten verwenden Debug
-Builds standardmäßig nicht den Linker, und Release
-Builds legen PublishTrimmed=true
und TrimMode=partial
fest.
Wenn die Legacyeinstellung AndroidLinkMode
verwendet wird, werden sowohl SdkOnly
als auch Full
auf äquivalente Linker-Einstellungen gesetzt:
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode>
Mit AndroidLinkMode=SdkOnly
werden nur BCL- und SDK-Assemblies, die mit %(Trimmable)
markiert sind, auf Memberebene verknüpft.
AndroidLinkMode=Full
setzt %(TrimMode)=partial
auf alle .NET-Assemblys.
Tipp
Es wird empfohlen, auf die neuen Linker-Einstellungen umzusteigen, da die Einstellung AndroidLinkMode
irgendwann veraltet sein wird.
.NET 9 verfügt über neue Einstellungen für den Linker:
-
<TrimMode>Full</TrimMode>
, das die vollständige Kürzung ausführt.
Weitere Informationen finden Sie unter Kürzungsoptionen.
In .NET für Android-Projekten verwenden Debug
-Builds standardmäßig nicht den Linker, und Release
-Builds legen PublishTrimmed=true
und TrimMode=partial
fest.
Ahead-of-time-Kompilierung
Bei $(RunAOTCompilation)
handelt es sich um die neue MSBuild-Eigenschaft zur Aktivierung der Ahead-of-Time (AoT)-Kompilierung. Dies ist die gleiche Eigenschaft, die für Blazor WASM verwendet wird. Die $(AotAssemblies)
-Eigenschaft ermöglicht außerdem AOT, um die Migration von Xamarin.Android-Projekten zu .NET für Android-Projekten zu unterstützen. Diese Eigenschaft wurde jedoch in .NET 7 als veraltet markiert.
Die Release-Builds enthalten standardmäßig die folgenden AOT-Eigenschaftswerte:
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<RunAOTCompilation>true</RunAOTCompilation>
<AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>
Bei diesem Verhalten werden die $(RunAOTCompilation)
- und $(AndroidEnableProfiledAot)
-Eigenschaften gelöscht und die optimalen Einstellungen für Startzeit und App-Größe ausgewählt.
Um AOT zu deaktivieren, müssen Sie die $(RunAOTCompilation)
- und $(AndroidEnableProfiledAot)
-Eigenschaften explizit auf false
festlegen:
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<RunAOTCompilation>false</RunAOTCompilation>
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
</PropertyGroup>
Unterstützte Codierungen
Wenn Ihre Xamarin.Android-App bestimmte internationale Codesets verwendet, müssen diese explizit in Ihrer Projektdatei mit der MSBuild-Eigenschaft Mandroidl18n
angegeben werden, damit der Linker die unterstützenden Ressourcen einbeziehen kann. Weitere Informationen zu dieser Build-Eigenschaft finden Sie unter MAndroidl18n.
Die MSBuild-Eigenschaft Mandroidl18n
wird jedoch in .NET für Android-Apps nicht unterstützt. Sie wird stattdessen vom NuGet-Paket System.TextEncoding.CodePages unterstützt. Weitere Informationen finden Sie unter CodePagesEncodingProvider.
.NET CLI
.NET für Android unterstützt die Verwendung der .NET-Befehlszeilenschnittstelle (.NET CLI) zum Erstellen, Erstellen, Veröffentlichen und Ausführen von Android-Apps.
dotnet new
dotnet new
kann verwendet werden, um neue .NET für Android-Projekte und -Elemente mithilfe von Projektvorlagen und Elementvorlagen zu erstellen, die gemäß den Mustern und der Benennung vorhandener .NET-Vorlagen benannt sind:
Vorlage | Kurzname | Sprache | Tags |
---|---|---|---|
Android-Aktivitätsvorlage | android-activity | C# | Android |
Android Java-Bibliotheksbindung | android-bindinglib | C# | Android |
Android-Layoutvorlage | android-layout | C# | Android |
Android-Klassenbibliothek | androidlib | C# | Android |
Android-App | Android | C# | Android |
Die folgenden Beispiele zeigen die Verwendung von dotnet new
zum Erstellen verschiedener .NET für Android-Projekte:
dotnet new android --output MyAndroidApp --packageName com.mycompany.myandroidapp
dotnet new androidlib --output MyAndroidLibrary
dotnet new android-bindinglib --output MyJavaBinding
Nachdem .NET für Android-Projekte erstellt wurden, können Elementvorlagen zum Hinzufügen von Elementen zu den Projekten verwendet werden:
dotnet new android-activity --name LoginActivity --namespace MyAndroidApp
dotnet new android-layout --name MyLayout --output Resources/layout
dotnet build & publish
Für .NET für Android erstellt dotnet build
eine ausführbare App. Dies bedeutet die Erstellung einer .apk
- oder .aab
-Datei während des Buildprozesses und die Anordnung von MSBuild-Aufgaben aus dem .NET SDK, sodass diese während des Builds ausgeführt werden. Daher führt .NET für Android während eines Builds die folgenden Aktionen aus:
- Ausführen von
aapt
, umResource.designer.cs
zu generieren und potenzielle Buildfehler und Probleme in@(AndroidResource)
-Dateien auszugeben. - Kompilieren von C#-Code
- Führen Sie das MSBuild-Ziel ILLink zum Linken aus.
- Generieren Sie Java-Stubs und
AndroidManifest.xml
. - Kompilieren Sie Java-Code über
javac
. - Konvertieren Sie Java-Code über d8/r8 in
.dex
. - Erstellen Sie
.apk
oder.aab
und signieren Sie es.
dotnet publish
ist für die Veröffentlichung einer App für Google Play und andere Vertriebsmechanismen wie Ad-hoc reserviert. Es signiert auch die .apk
oder .aab
mit verschiedenen Schlüsseln.
Hinweis
Das Verhalten innerhalb von IDEs wird sich unterscheiden. Das Build
-Ziel wird keine .apk
-Datei erzeugen, wenn $(BuildingInsideVisualStudio)
true
ist. IDEs rufen das Install
-Ziel für die Bereitstellung auf, was die .apk
-Datei erzeugt. Dieses Verhalten entspricht Xamarin.Android.
dotnet run
dotnet run
kann verwendet werden, um Apps auf einem Gerät oder Emulator über das Argument --project
zu starten:
dotnet run --project HelloAndroid.csproj
Alternativ können Sie auch das MSBuild-Ziel Run
verwenden:
dotnet build HelloAndroid.csproj -t:Run