Napojení knihovny Java z Maven

Běžným scénářem vazeb je vytvoření vazby knihovny Java hostované v úložišti Maven (například Maven Central).

.NET 9 zavádí podporu automatického stahování knihovny Java z úložiště Maven a ověření jejích závislostí, aby byl tento scénář jednodušší a přesnější.

Návod

Pokud používáte verzi .NET před .NET 9 nebo vazbu knihovny Java, která není z Mavenu, přečtěte si dokumentaci k vazbě knihovny Java .

Návod

V tomto průvodci propojíme verzi 3.1.0 knihovny CircleImageView, což je knihovna, která zobrazuje obrázek v kruhovém rámečku.

V úložišti Maven vidíme následující identifikátory této knihovny, které budou potřeba později:

<dependency>
    <groupId>de.hdodenhof</groupId>
    <artifactId>circleimageview</artifactId>
    <version>3.1.0</version>
</dependency>

Vytvoření knihovny vazeb

Nejprve vytvořte nový projekt Knihovny vazeb. Můžete to provést pomocí šablony projektu "Android Java Binding Library", která je k dispozici v sadě Visual Studio, nebo pomocí příkazového dotnet řádku:

dotnet new android-bindinglib

Otevřete soubor projektu (.csproj) vytvořený šablonou. Prvek AndroidMavenLibrary přidáme uvnitř ItemGroup pro určení knihovny Java, kterou chceme svázat.

<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" />
</ItemGroup>

Teď sestavte projekt pomocí příkazu Sestavení sady Visual Studio nebo z příkazového řádku:

dotnet build

Tato knihovna Java byla nyní navázána a je připravena k odkazování v projektu aplikace .NET pro Android nebo k publikování na NuGet pro veřejné použití.

Další možnosti

Přeskočte spravované vazby

Ve výchozím nastavení se pro všechny bindingy jazyka C# vytvoří .JAR/.AAR umístěné v projektu. Vazby jazyka C# ale můžou být složité vytvořit a nejsou nutné, pokud nemáte v úmyslu volat rozhraní Java API z jazyka C#.

To platí zejména v případě, že je knihovna Java jednoduše závislostí jiné knihovny Java a není nutné ji volat přímo z jazyka C#. V tomto případě Bind="false" lze atribut použít pouze k zahrnutí závislosti Java, ale ne k vytvoření vazby.

<ItemGroup>
  <AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" Bind="false" />
</ItemGroup>

Další kroky

  • AndroidMavenLibrary Možnosti – knihovna návodu se automaticky stáhla z Maven Central, což je výchozí úložiště. Je možné zadat další úložiště a možnosti Mavenu.

  • Ověřování závislostí Java – Knihovna Java vázaná v návodu je triviální a nezávisí na žádném jiném balíčku Java. Většina knihoven bude záviset na dalších balíčcích Java a chyby budou oznámeny, aby se zajistilo, že tyto závislosti lze vyřešit.

Aby bylo možné sestavení vazby, chyby musí být opraveny a vypadají takto:

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.
  • Přizpůsobení vazeb pomocí metadat – knihovna Java uvedená v návodu je triviální a nástroje pro vazby ji dokázaly automaticky převést na API jazyka C#. Bohužel to často není případ a často dochází k chybám kompilace. Tyto chyby musí být opraveny pomocí "metadat", aby nástroje pro vazby ručně daly pokyn, jak vyřešit rozdíly mezi jazyky Java a C#.

  • Změna oborů názvů – Datové typy v návodu se nacházejí v oboru názvů .NET DE.Hdodenhof.Circleimageview. Názvy balíčků Java mají tendenci být více podrobné než obory názvů .NET a může být vhodnější je změnit, například použít CircleImageViewLibraryAndroidNamespaceReplacement:

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