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.
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 attCircleImageViewLibraryanvända enAndroidNamespaceReplacement:
<ItemGroup>
<AndroidNamespaceReplacement Include='DE.Hdodenhof.Circleimageview' Replacement='CircleImageViewLibrary' />
</ItemGroup>