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.
Hinweis
Dieses Feature ist nur in .NET 9+ verfügbar.
Nachdem die Überprüfung der Java-Abhängigkeiten für ein Bindungsprojekt aktiviert wurde, entweder automatisch über <AndroidMavenLibrary> oder manuell über <AndroidLibrary>, können Fehler auftreten, die zu beheben sind, wie z. B.:
error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied.
Diese Abhängigkeiten können auf viele verschiedene Arten erfüllt werden.
<PackageReference>
Im besten Fall ist bereits ein Binding der Java-Abhängigkeit auf NuGet.org verfügbar. Dieses Paket kann von Microsoft oder der .NET-Community bereitgestellt werden. Pakete, die von Microsoft verwaltet werden, werden möglicherweise in der Fehlermeldung wie folgt angezeigt:
error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied. Microsoft maintains the NuGet package 'Xamarin.AndroidX.Collection' that could fulfill this dependency.
Das Hinzufügen des Xamarin.AndroidX.Collection Pakets zum Projekt sollte diesen Fehler automatisch beheben, da das Paket Metadaten bereitstellt, um anzugeben, dass es die androidx.collection:collection Abhängigkeit bereitstellt. Dazu suchen Sie nach einem maßgeschneiderten NuGet-Tag. Für die AndroidX-Sammlungsbibliothek sieht das Tag beispielsweise wie folgt aus:
<!-- artifact={GroupId}:{ArtifactId}:{Java Library Version} -->
<PackageTags>artifact=androidx.collection:collection:1.0.0</PackageTags>
Es kann jedoch NuGet-Pakete geben, die eine Abhängigkeit erfüllen, aber diese Metadaten nicht hinzugefügt haben. In diesem Fall müssen Sie explizit angeben, welche Abhängigkeit das Paket enthält:JavaArtifact
<PackageReference
Include="Xamarin.Kotlin.StdLib"
Version="1.7.10"
JavaArtifact="org.jetbrains.kotlin:kotlin-stdlib:1.7.10" />
Damit weiß der Bindungsprozess, dass die Java-Abhängigkeit vom NuGet-Paket erfüllt ist.
Hinweis
NuGet-Pakete geben ihre eigenen Abhängigkeiten an, daher müssen Sie sich keine Gedanken über transitive Abhängigkeiten machen.
<ProjectReference>
Wenn die erforderliche Java-Abhängigkeit von einem anderen Projekt in Ihrer Lösung bereitgestellt wird, können Sie die <ProjectReference> annotieren, um die Abhängigkeit, die es erfüllt, zu spezifizieren.
<ProjectReference
Include="..\My.Other.Binding\My.Other.Binding.csproj"
JavaArtifact="my.other.binding:helperlib:1.0.0" />
Damit weiß der Bindungsprozess, dass die Java-Abhängigkeit vom referenzierten Projekt erfüllt ist.
Hinweis
Jedes Projekt gibt ihre eigenen Abhängigkeiten an, sodass Sie sich keine Gedanken über transitive Abhängigkeiten machen müssen.
<AndroidLibrary>
Wenn Sie ein öffentliches NuGet-Paket erstellen, sollten Sie der NuGet-Richtlinie "eine Bibliothek pro Paket" folgen, damit die NuGet-Abhängigkeitsdiagramm funktioniert. Wenn Sie jedoch eine Bindung für private Zwecke erstellen, sollten Sie Ihre Java-Abhängigkeiten direkt in die übergeordnete Bindung einschließen.
Dies kann durch Hinzufügen zusätzlicher <AndroidLibrary> Elemente zum Projekt erfolgen:
<ItemGroup>
<AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" />
</ItemGroup>
Um die Java-Bibliothek einzuschließen, aber keine C#-Bindungen dafür zu erstellen, markieren Sie sie mit Bind="false":
<ItemGroup>
<AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" Bind="false" />
</ItemGroup>
<AndroidMavenLibrary> Alternativ können Sie eine Java-Bibliothek aus einem Maven-Repository abrufen:
<ItemGroup>
<AndroidMavenLibrary Include="my.library:dependency-library" Version="1.0.0" />
<!-- or, if the Java library doesn't need to be bound -->
<AndroidMavenLibrary Include="my.library:dependency-library" Version="1.0.0" Bind="false" />
</ItemGroup>
Hinweis
Wenn die Abhängigkeitsbibliothek über eigene Abhängigkeiten verfügt, müssen Sie sicherstellen, dass sie erfüllt sind.
<AndroidIgnoredJavaDependency>
Als letzte Möglichkeit kann eine erforderliche Java-Abhängigkeit ignoriert werden. Ein Beispiel, wenn dies nützlich ist, ist, wenn die Abhängigkeitsbibliothek eine Sammlung von Java-Anmerkungen ist, die nur beim Kompilierungstyp und nicht zur Laufzeit verwendet werden.
Beachten Sie, dass während die Fehlermeldung weggeht, bedeutet dies nicht, dass das Paket magisch funktioniert. Wenn die Abhängigkeit tatsächlich zur Laufzeit benötigt wird und nicht bereitgestellt wird, stürzt die Android-Anwendung mit einem Java.Lang.NoClassDefFoundError Fehler ab.
<ItemGroup>
<AndroidIgnoredJavaDependency Include="com.google.errorprone:error_prone_annotations:2.15.0" />
</ItemGroup>
Hinweis
Verwendung von JavaArtifact kann mehrere Artefakte angeben, indem diese durch Komma oder Semikolon getrennt werden.