Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett vanligt bindningsscenario är att binda ett Java-bibliotek som finns på en Maven-lagringsplats (till exempel Maven Central).
.NET 9 introducerar stöd för att automatiskt ladda ned ett Java-bibliotek från en Maven-lagringsplats och verifiera dess beroenden för att göra det här scenariot enklare och mer exakt.
Tips/Råd
Om du använder en .NET-version före .NET 9 eller binder ett Java-bibliotek som inte kommer från Maven läser du dokumentationen Om att binda ett Java-bibliotek .
Walkthrough
I den här genomgången ska vi binda versionen 3.1.0 av CircleImageView, ett bibliotek som visar en bild på en cirkulär arbetsyta.
Från Maven-lagringsplatsen kan vi se följande identifierare för det här biblioteket som behövs senare:
<dependency>
<groupId>de.hdodenhof</groupId>
<artifactId>circleimageview</artifactId>
<version>3.1.0</version>
</dependency>
Skapa bindningsbiblioteket
Skapa först ett nytt bindningsbiblioteksprojekt. Detta kan göras med projektmallen "Android Java Binding Library" som är tillgänglig i Visual Studio eller via kommandoraden dotnet med:
dotnet new android-bindinglib
Öppna projektfilen (.csproj) som skapats av mallen. Vi lägger till ett AndroidMavenLibrary element i ett ItemGroup för att ange det Java-bibliotek som vi vill binda:
<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
<AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" />
</ItemGroup>
Skapa nu projektet med hjälp av Kommandot Build i Visual Studio eller från kommandoraden:
dotnet build
Det här Java-biblioteket har nu bundits och det är redo att refereras av ett .NET för Android-programprojekt eller publiceras till NuGet för offentlig förbrukning.
Ytterligare alternativ
Hoppa över hanterade bindningar
Som standardinställning skapas C#-bindningar för alla .JAR/.AAR som placeras i projektet. C#-bindningar kan dock vara svåra att skapa och är inte nödvändiga om du inte tänker anropa Java-API:et från C#.
Detta gäller särskilt när Java-biblioteket helt enkelt är beroende av ett annat Java-bibliotek och inte behöver anropas direkt från C#. I det här fallet Bind="false" kan attributet endast användas för att inkludera Java-beroendet men inte binda det.
<ItemGroup>
<AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" Bind="false" />
</ItemGroup>
Nästa steg
AndroidMavenLibraryAlternativ – Genomgångsbiblioteket hämtades automatiskt från Maven Central som är standardlagringsplatsen. Andra Maven-lagringsplatser och alternativ kan anges.Java-beroendeverifiering – Java-biblioteket som är bundet i genomgången är trivialt och var inte beroende av några andra Java-paket. De flesta bibliotek är beroende av andra Java-paket och fel visas för att säkerställa att dessa beroenden kan lösas.
Dessa fel måste åtgärdas innan bindningen kan skapas och se ut så här:
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.
Anpassning av bindningar med metadata – Java-biblioteket som är bundet i genomgången är trivialt och bindningsverktyget kunde konvertera det helt automatiskt till ett C#-API. Tyvärr är detta ofta inte fallet och det kommer ofta att finnas kompileringsfel. Dessa fel måste åtgärdas med "metadata" för att manuellt instruera bindningsverktyget hur du löser skillnader mellan Java- och C#-språken.
Ändra namnområden – Typerna i genomgången hamnar i .NET-namnområdet
DE.Hdodenhof.Circleimageview. Java-paketnamn tenderar att vara mer utförliga än .NET-namnområden och det kan vara mer önskvärt att ändra det, till exempel attCircleImageViewLibraryanvända enAndroidNamespaceReplacement:
<ItemGroup>
<AndroidNamespaceReplacement Include='DE.Hdodenhof.Circleimageview' Replacement='CircleImageViewLibrary' />
</ItemGroup>