Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Remarque
Cette fonctionnalité est disponible uniquement dans .NET 9+.
Une fois la vérification des dépendances Java activée pour un projet de liaisons, soit automatiquement via <AndroidMavenLibrary> ou manuellement <AndroidLibrary>, il peut y avoir des erreurs à résoudre, telles que :
error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied.
Ces dépendances peuvent être remplies de plusieurs façons différentes.
<PackageReference>
Dans le meilleur cas, il existe déjà une liaison existante de la dépendance Java disponible sur NuGet.org. Ce package peut être fourni par Microsoft ou la communauté .NET. Les packages gérés par Microsoft peuvent être exposés dans le message d’erreur comme suit :
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.
L’ajout du paquet Xamarin.AndroidX.Collection au projet doit résoudre automatiquement cette erreur, car le paquet fournit des métadonnées pour indiquer qu'il fournit la dépendance androidx.collection:collection. Cela est fait en recherchant une balise NuGet spécialement conçue. Par exemple, pour la bibliothèque de collections AndroidX, la balise ressemble à ceci :
<!-- artifact={GroupId}:{ArtifactId}:{Java Library Version} -->
<PackageTags>artifact=androidx.collection:collection:1.0.0</PackageTags>
Toutefois, il peut y avoir des packages NuGet qui répondent à une dépendance, mais qui n’ont pas eu ces métadonnées ajoutées. Dans ce cas, vous devez spécifier explicitement la dépendance que contient le package avec JavaArtifact:
<PackageReference
Include="Xamarin.Kotlin.StdLib"
Version="1.7.10"
JavaArtifact="org.jetbrains.kotlin:kotlin-stdlib:1.7.10" />
Avec cela, le processus de liaison sait que la dépendance Java est satisfaite par le package NuGet.
Remarque
Les packages NuGet spécifient leurs propres dépendances. Vous n’aurez donc pas besoin de vous soucier des dépendances transitives.
<ProjectReference>
Si la dépendance Java nécessaire est fournie par un autre projet dans votre solution, vous pouvez annoter la <ProjectReference> dépendance pour spécifier la dépendance qu’elle répond :
<ProjectReference
Include="..\My.Other.Binding\My.Other.Binding.csproj"
JavaArtifact="my.other.binding:helperlib:1.0.0" />
Avec cela, le processus de liaison sait que la dépendance Java est satisfaite par le projet référencé.
Remarque
Chaque projet spécifie ses propres dépendances. Vous n’aurez donc pas à vous soucier des dépendances transitives.
<AndroidLibrary>
Si vous créez un package NuGet public, vous devez suivre la stratégie « une bibliothèque par package » de NuGet afin que le graphe des dépendances NuGet fonctionne. Toutefois, si vous créez une liaison pour une utilisation privée, vous pouvez inclure vos dépendances Java directement à l’intérieur de la liaison parente.
Pour ce faire, ajoutez des éléments supplémentaires <AndroidLibrary> au projet :
<ItemGroup>
<AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" />
</ItemGroup>
Pour inclure la bibliothèque Java sans générer de liaisons C#, utilisez le marqueur Bind="false" :
<ItemGroup>
<AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" Bind="false" />
</ItemGroup>
<AndroidMavenLibrary> Vous pouvez également l’utiliser pour récupérer une bibliothèque Java à partir d’un référentiel Maven :
<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>
Remarque
Si la bibliothèque de dépendances a ses propres dépendances, vous devez vous assurer qu'elles sont satisfaites.
<AndroidIgnoredJavaDependency>
En dernier recours, une dépendance Java nécessaire peut être ignorée. Par exemple, quand cela est utile, c’est si la bibliothèque de dépendances est une collection d’annotations Java qui sont utilisées uniquement au niveau du type de compilation et non au moment de l’exécution.
Notez que pendant que le message d’erreur disparaît, cela ne signifie pas que le package fonctionnera magiquement. Si la dépendance est réellement nécessaire au moment de l'exécution et n'est pas fournie, l'application Android plantera en raison d'une Java.Lang.NoClassDefFoundError erreur.
<ItemGroup>
<AndroidIgnoredJavaDependency Include="com.google.errorprone:error_prone_annotations:2.15.0" />
</ItemGroup>
Remarque
Toute utilisation de JavaArtifact peut spécifier plusieurs artefacts en les limitant avec une virgule ou un point-virgule.