Liaison d’une bibliothèque Java à partir de Maven

Un scénario de liaison courant consiste à lier une bibliothèque Java hébergée dans un référentiel Maven (comme Maven Central).

.NET 9 introduit la prise en charge du téléchargement automatique d’une bibliothèque Java à partir d’un référentiel Maven et de la vérification de ses dépendances afin de faciliter et de rendre ce scénario plus facile et plus précis.

Conseil

Si vous utilisez une version .NET antérieure à .NET 9 ou si vous liez une bibliothèque Java qui ne provient pas de Maven, consultez la documentation Liaison d’une bibliothèque Java.

Procédure pas à pas

Dans cette procédure pas à pas, nous allons lier la version 3.1.0 de CircleImageView, une bibliothèque qui affiche une image dans un canevas circulaire.

À partir du référentiel Maven, nous pouvons voir les identificateurs suivants pour cette bibliothèque qui seront nécessaires ultérieurement :

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

Création de la bibliothèque de liaisons de programmation

Tout d’abord, créez un projet de bibliothèque de liaisons. Pour ce faire, vous pouvez utiliser le modèle de projet « Bibliothèque de liaisons Java Android » disponible dans Visual Studio ou via la dotnet ligne de commande avec :

dotnet new android-bindinglib

Ouvrez le fichier projet (.csproj) créé par le modèle. Nous allons ajouter un élément AndroidMavenLibrary à l'intérieur d'un ItemGroup pour spécifier la bibliothèque Java que nous souhaitons lier.

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

Maintenant, générez le projet à l’aide de la commande Build de Visual Studio ou à partir de la ligne de commande :

dotnet build

Cette bibliothèque Java a maintenant été liée et est prête à être référencée pour un projet d'application .NET destiné à Android ou publiée sur NuGet pour une utilisation publique.

Options supplémentaires

Ignorer les liaisons managées

Par défaut, les liaisons C# sont créées pour n’importe quel . JARRE/. AAR placé dans le projet. Toutefois, les liaisons C# peuvent être difficiles à créer et ne sont pas nécessaires si vous n’avez pas l’intention d’appeler l’API Java à partir de C#.

Cela est particulièrement le cas lorsque la bibliothèque Java est simplement une dépendance d’une autre bibliothèque Java et n’a pas besoin d’être appelée directement à partir de C#. Dans ce cas, l’attribut Bind="false" peut être utilisé pour inclure uniquement la dépendance Java, mais pas la lier.

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

Étapes suivantes

  • AndroidMavenLibrary Options : la bibliothèque de procédures pas à pas a été téléchargée automatiquement à partir de Maven Central, qui est le référentiel par défaut. D’autres référentiels et options Maven peuvent être spécifiés.

  • Vérification des dépendances Java : la bibliothèque Java liée à la procédure pas à pas est triviale et ne dépendait pas d’autres packages Java. La plupart des bibliothèques dépendent d’autres packages Java et des erreurs seront exposées pour vous assurer que ces dépendances peuvent être résolues.

Ces erreurs doivent être corrigées avant de pouvoir créer la liaison et ressemblent à ceci :

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.
  • Personnalisation des liaisons avec des métadonnées : la bibliothèque Java intégrée dans le parcours est triviale et l’outil de liaison a été en mesure de la convertir entièrement en API C#. Malheureusement, ce n’est souvent pas le cas et il y aura souvent des erreurs de compilation. Ces erreurs doivent être corrigées avec des « métadonnées » pour indiquer manuellement à l’outil de liaison comment résoudre les différences entre les langages Java et C#.

  • Modification des espaces de noms - Les types dans le guide se retrouvent dans l’espace de noms .NETDE.Hdodenhof.Circleimageview. Les noms de paquets Java ont tendance à être plus verbeux que les espaces de noms .NET, et il peut être plus souhaitable de les modifier, par exemple en CircleImageViewLibrary utilisant un AndroidNamespaceReplacement:

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