Delen via


Bindingsbibliotheken distribueren

Zodra een Java-bibliotheek is gebonden aan gebruik in .NET voor Android, zijn er meerdere manieren waarop deze kan worden gebruikt:

  • Projectverwijzing : als het bindingsproject en het toepassingsproject zich in hetzelfde oplossingsbestand bevinden, is het <ProjectReference> meestal de eenvoudigste manier om de binding te gebruiken.

  • NuGet-pakket - Een NuGet-pakket is ideaal voor openbare publicatie of voor een interne gedistribueerde ontwikkelomgeving met een interne NuGet-server.

  • Bestandsverwijzing - een gebruikende toepassing kan rechtstreeks een <Reference> aan een binding .dll toevoegen als noch het bindingsproject, noch een NuGet-server beschikbaar is.

Opties voor binding en verpakking beheren

Een bibliotheek voor bindingen project heeft twee opties om te controleren of een <AndroidLibrary> wordt gebonden en gedistribueerd.

  • Bind (true/false) - Standaard naar true, wat inhoudt dat beheerde bindingen worden gecreëerd voor de opgegeven <AndroidLibrary>. Instellen op false betekent dat de Java-bibliotheek in de uitvoer wordt opgenomen, maar niet over beheerde bindingen beschikt. Dit is handig als de bibliotheek een benodigde afhankelijkheid van een andere Java-bibliotheek heeft, maar deze niet wordt aangeroepen vanuit C#.
<!-- Java library will have C# bindings and be included in the output -->
<AndroidLibrary Include="okhttp-4.12.0.jar" />

<!-- Java library will not have C# bindings but will still be included in the output -->
<AndroidLibrary Include="okio-3.9.0.jar" Bind="false" />
  • Pack (true/false) - Standaard op true, wat betekent dat de opgegeven <AndroidLibrary> in de uitvoer wordt opgenomen (zoals een NuGet-pakket). Instelling op false betekent dat de Java-bibliotheek niet in de uitvoer wordt opgenomen. Dit is een zeldzaam scenario als de afhankelijkheid al via alternatieve middelen wordt verstrekt.
<!-- Java library will have C# bindings and be included in the output -->
<AndroidLibrary Include="okhttp-4.12.0.jar" />

<!-- Java library will have C# bindings but will *not* be included in the output -->
<AndroidLibrary Include="okio-3.9.0.jar" Pack="false" />

Projectreferentie

Als het bindingsproject en het toepassingsproject zich in hetzelfde oplossingsbestand bevinden, is het gebruik van een <ProjectReference> algemeen de eenvoudigste manier om de binding te gebruiken:

<ProjectReference Include="mybindinglib.csproj" />

Het buildsysteem is verantwoordelijk voor het toevoegen van de beheerde bindingen, evenals bestanden .jar/.aar aan het toepassingsproject.

NuGet-pakket

Als een eigenschap die is overgenomen van .NET SDK-projecten, kan elke bindingsbibliotheek eenvoudig worden verpakt in een herdistribueerbaar NuGet-pakket met behulp van de opdracht 'Pack' in Visual Studio of vanaf de opdrachtregel:

dotnet pack

De bindingsbibliotheek en de Java-bibliotheek worden opgenomen in het NuGet-pakket:

NuGet-pakketinhoud

Gebruik het Pack bovenstaande kenmerk om te bepalen welke Java-bibliotheken u in het NuGet-pakket wilt gebruiken.

NuGet-pakketten kunnen worden aangepast met behulp van de standaard .NET MSBuild-elementen.

Bestandsreferentie

Als geen van de bovenstaande opties mogelijk is, kan er rechtstreeks naar de binding .dll worden verwezen met een <Reference> element. Houd er rekening mee dat Java-bibliotheken die deel uitmaken van de uitvoer van het bindingsproject zich in dezelfde map bevinden als de binding .dll.

Als u alleen de binding .dll naar een andere locatie verplaatst/kopieert en geen bestanden verplaatst/kopieert .jar/.dll , komen ze niet terecht in uw toepassing en mislukt de binding tijdens runtime.

Belangrijk

Bij het gebruik van een itemactie in de klassieke Xamarin.Android zou het .jar bestand in de .dll worden geplaatst, waardoor slechts één bestand nodig is. Ondersteuning hiervoor is verwijderd in .NET voor Android omdat de buildtijd van toepassingen aanzienlijk is toegenomen om ingesloten Java-bibliotheekbestanden te scannen en te extraheren. Alle benodigde .jar/.dll bestanden moeten zich in dezelfde map bevinden als de binding .dll.