Binden einer Java-Bibliothek aus Maven
Ein gängiges Bindungsszenario ist das Binden einer Java-Bibliothek, die in einem Maven-Repository (z . B. Maven Central) gehostet wird.
.NET 9 führt Unterstützung für das automatische Herunterladen einer Java-Bibliothek aus einem Maven-Repository und die Überprüfung der Abhängigkeiten ein, um dieses Szenario einfacher und genauer zu gestalten.
Tipp
Wenn Sie eine .NET-Version vor .NET 9 verwenden oder eine Java-Bibliothek binden, die nicht von Maven stammt, lesen Sie die Dokumentation zur Bindung einer Java-Bibliothek .
Exemplarische Vorgehensweise
In dieser exemplarischen Vorgehensweise binden wir die Version 3.1.0
von CircleImageView, einer Bibliothek, die ein Bild in einem Zirkelzeichenbereich anzeigt.
Im Maven-Repository sehen wir die folgenden Bezeichner für diese Bibliothek, die später benötigt werden:
<dependency>
<groupId>de.hdodenhof</groupId>
<artifactId>circleimageview</artifactId>
<version>3.1.0</version>
</dependency>
Erstellen der Bindungenbibliothek
Erstellen Sie zunächst ein neues Bindungsbibliotheksprojekt. Dies kann mit der Projektvorlage "Android Java Binding Library" erfolgen, die in Visual Studio oder über die dotnet
Befehlszeile verfügbar ist:
dotnet new android-bindinglib
Öffnen Sie die von der Vorlage erstellte Projektdatei (.csproj
). Wir fügen ein AndroidMavenLibrary
Element in einem ItemGroup
Element hinzu, um die Java-Bibliothek anzugeben, die gebunden werden soll:
<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
<AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" />
</ItemGroup>
Erstellen Sie nun das Projekt mit dem Befehl "Erstellen" von Visual Studio oder über die Befehlszeile:
dotnet build
Diese Java-Bibliothek wurde jetzt gebunden und kann von einem .NET für Android-Anwendungsprojekt referenziert oder für öffentliche Nutzung in NuGet veröffentlicht werden.
Zusätzliche Optionen
Verwaltete Bindungen überspringen
Standardmäßig werden C#-Bindungen für alle erstellt. KRUG/. AAR im Projekt platziert. C#-Bindungen können jedoch schwierig zu erstellen sein und sind nicht erforderlich, wenn Sie nicht beabsichtigen, die Java-API aus C# aufzurufen.
Dies ist insbesondere der Fall, wenn die Java-Bibliothek einfach eine Abhängigkeit von einer anderen Java-Bibliothek ist und nicht direkt von C# aufgerufen werden muss. In diesem Fall kann das Bind="false"
Attribut nur verwendet werden, um die Java-Abhängigkeit einzuschließen, aber nicht zu binden.
<ItemGroup>
<AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" Bind="false" />
</ItemGroup>
Nächste Schritte
AndroidMavenLibrary
Optionen – Die exemplarische Vorgehensweisenbibliothek wurde automatisch aus Maven Central heruntergeladen, was das Standard-Repository ist. Andere Maven-Repositorys und -Optionen können angegeben werden.Java-Abhängigkeitsüberprüfung – Die in der exemplarischen Vorgehensweise gebundene Java-Bibliothek ist trivial und hängt nicht von anderen Java-Paketen ab. Die meisten Bibliotheken hängen von anderen Java-Paketen ab, und Fehler werden angezeigt, um sicherzustellen, dass diese Abhängigkeiten behoben werden können.
Diese Fehler müssen behoben werden, bevor die Bindung erstellt werden kann und wie folgt aussieht:
error XA4241: Java dependency 'androidx.collection:collection:1.0.0' is not satisfied.
error XA4242: Java dependency 'org.jetbrains.kotlin:kotlin-stdlib:1.9.0' is not satisfied. Microsoft maintains the NuGet package 'Xamarin.Kotlin.StdLib' that could fulfill this dependency.
Anpassen von Bindungen mit Metadaten – Die in der exemplarischen Vorgehensweise gebundene Java-Bibliothek ist trivial, und die Bindungstools konnten sie vollständig automatisch in eine C#-API konvertieren. Leider ist dies oft nicht der Fall, und es werden häufig Kompilierungsfehler auftreten. Diese Fehler müssen mit "Metadaten" behoben werden, um die Bindungstools manuell anzuweisen, wie Unterschiede zwischen den Java- und C#-Sprachen behoben werden.
Ändern von Namespaces – Die Typen in der exemplarischen Vorgehensweise enden im .NET-Namespace
DE.Hdodenhof.Circleimageview
. Java-Paketnamen sind in der Regel ausführlicher als .NET-Namespaces, und es kann wünschenswerter sein, sie zu ändern, z. B. dieCircleImageViewLibrary
Verwendung einerAndroidNamespaceReplacement
:
<ItemGroup>
<AndroidNamespaceReplacement Include='DE.Hdodenhof.Circleimageview' Replacement='CircleImageViewLibrary' />
</ItemGroup>