Condividi tramite


Collegamento di una libreria Java da Maven

Uno scenario di associazione comune è l'associazione di una libreria Java ospitata in un repository Maven (ad esempio Maven Central).

.NET 9 introduce il supporto per il download automatico di una libreria Java da un repository Maven e la verifica delle relative dipendenze per semplificare e rendere questo scenario più semplice e accurato.

Suggerimento

Se si usa una versione .NET precedente a .NET 9 o si associa una libreria Java che non proviene da Maven, vedere la documentazione relativa all'associazione di una libreria Java.

guida dettagliata

In questa guida verrà collegata la versione 3.1.0 di CircleImageView, una libreria che visualizza un'immagine in un'area di disegno circolare.

Dal repository Maven è possibile visualizzare gli identificatori seguenti per questa libreria che saranno necessari in un secondo momento:

<dependency>
    <groupId>de.hdodenhof</groupId>
    <artifactId>circleimageview</artifactId>
    <version>3.1.0</version>
</dependency>

Creazione della libreria dei binding

Creare prima di tutto un nuovo progetto libreria binding. Questa operazione può essere eseguita con il modello di progetto "Libreria di binding Java Android" disponibile in Visual Studio o tramite la dotnet riga di comando con:

dotnet new android-bindinglib

Aprire il file di progetto (.csproj) creato dal modello. Aggiungeremo un elemento AndroidMavenLibrary all'interno di un ItemGroup per specificare la libreria Java che vogliamo associare.

<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" />
</ItemGroup>

Compilare ora il progetto usando il comando Compila di Visual Studio o dalla riga di comando:

dotnet build

Questa libreria Java è stata associata ed è pronta per essere referenziata da un progetto di applicazione .NET per Android o pubblicata su NuGet per l'utilizzo pubblico.

Opzioni aggiuntive

Saltare le associazioni gestite

Per impostazione predefinita, le associazioni C# verranno create per qualsiasi .JAR/.AAR inserito nel progetto. Tuttavia, le associazioni C# possono essere difficili da creare e non sono necessarie se non si intende chiamare l'API Java da C#.

Questo è soprattutto il caso in cui la libreria Java è semplicemente una dipendenza di un'altra libreria Java e non deve essere chiamata direttamente da C#. In questo caso, l'attributo Bind="false" può essere usato solo per includere la dipendenza Java, ma non per associarla.

<ItemGroup>
  <AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" Bind="false" />
</ItemGroup>

Passaggi successivi

  • AndroidMavenLibrary Opzioni : la libreria della procedura dettagliata è stata scaricata automaticamente da Maven Central, ovvero il repository predefinito. È possibile specificare altri repository e opzioni Maven.

  • Verifica delle dipendenze Java - La libreria Java illustrata nella guida è semplice e non dipende da altri pacchetti Java. La maggior parte delle librerie dipenderà da altri pacchetti Java e verranno visualizzati errori per garantire che queste dipendenze possano essere risolte.

Questi errori devono essere corretti prima che il processo di compilazione possa essere eseguito, e si presentano come segue:

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.
  • Personalizzazione di binding con metadati: la libreria Java legata nella guida passo-passo è semplice e gli strumenti di binding sono stati in grado di convertirla completamente in un'API C#. Sfortunatamente questo non è spesso il caso e spesso si verificano errori di compilazione. Questi errori devono essere corretti con "metadati" per indicare manualmente agli strumenti di associazione come risolvere le differenze tra i linguaggi Java e C#.

  • Modifica degli spazi dei nomi: i tipi nella procedura dettagliata finiscono nello spazio dei nomi .NETDE.Hdodenhof.Circleimageview. I nomi dei pacchetti Java tendono ad essere più verbosi dei namespace .NET e potrebbe essere preferibile modificarli, ad esempio usando CircleImageViewLibraryAndroidNamespaceReplacement.

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