Binda ett Java-bibliotek

Android-communityn erbjuder många Java-bibliotek som du kanske vill använda i din app. Dessa Java-bibliotek paketeras ofta i .JAR (Java Archive) eller .AAR-format (Android Archive), men du kan paketera ett .JAR/.AAR i ett Java-bindningsbibliotek så att dess funktionalitet är tillgänglig för .NET för Android-program. Syftet med Java Bindings-biblioteket är att göra API:erna i .JAR/.AAR-filen tillgängliga för C#-kod via automatiskt genererade kodomslag.

Tips/Råd

.NET 9 introducerar stöd för automatisk nedladdning och bindning av ett Java-bibliotek från en Maven-lagringsplats. Se dokumentationen Om att binda ett Java-bibliotek från Maven för att förenkla det här scenariot.

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.

Ladda ned lokalt från circleimageview-3.1.0.aar för att bindas.

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

circleimageview-3.1.0.aar Kopiera filen till projektkatalogen.

Precis som .NET SDK-formatprojekt inkluderar .NET för Android-bindningsprojekt automatiskt alla .JAR/.AAR-filer i projektkatalogen som filer av typen AndroidLibrary, så att ingen ytterligare konfiguration behövs.

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 standard 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>
  <AndroidLibrary Update="circleimageview-3.1.0.aar" Bind="false" />
</ItemGroup>

Observera att om du använder automatiska importer måste du använda Update för att ändra den automatiskt importerade filen i stället för att lägga till ytterligare en kopia med Include.

Java-beroenden

Ett Java-bibliotek kan vara beroende av andra Java-bibliotek som måste paketeras med ditt program för att programmet ska fungera. Den här informationen tillhandahålls traditionellt i en . POM-fil, och det är ditt ansvar att se till att eventuella nödvändiga beroenden refereras korrekt, vanligtvis via ett NuGet-paket eller genom att paketera de nödvändiga . BURK/. AAR-filer i projektet.

I .NET 9 har funktionen Java Dependency Verification lagts till. Genom att ange . POM-fil, kan bindningsverktyget hjälpa dig att se till att du har uppfyllt alla nödvändiga Java-beroenden.

För att aktivera Java-beroendeverifiering för vår genomgång, se till att du använder .NET 9+ och att projektets mål är net9.0-android eller större.

Hämta lokalt från Maven-lagringsplatsencircleimageview-3.1.0.pom och placera den i projektmappen. ** Observera att .POM-filer inte identifieras automatiskt eftersom de måste associeras med rätt .JAR/.AAR.

Uppdatera den automatiskt importerade AndroidLibrary för att ange platsen för . POM-fil med Manifest attribut. Ange dessutom JavaArtifact och JavaVersion för Java-biblioteket:

<!-- JavaArtifact format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidLibrary
    Update="circleimageview-3.1.0.aar"
    Manifest="circleimageview-3.1.0.pom"
    JavaArtifact="de.hdodenhof:circleimageview"
    JavaVersion="3.1.0" />
</ItemGroup>

Det här biblioteket är trivialt och har inga Java-beroenden, men om det gjorde det och de var ouppfyllda skulle ett fel som det här genereras:

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.

Ytterligare information om hur du konfigurerar Java-beroendeverifiering och hur du uppfyller beroenden finns i dokumentationen.

Nästa steg

  • 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 att CircleImageViewLibrary använda en AndroidNamespaceReplacement:

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