Freigeben über


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. die CircleImageViewLibrary Verwendung einer AndroidNamespaceReplacement:

<ItemGroup>
  <AndroidNamespaceReplacement Include='DE.Hdodenhof.Circleimageview' Replacement='CircleImageViewLibrary' />
</ItemGroup>