Sdílet prostřednictvím


Interoperabilita nativní knihovny

Přehled

Interoperabilita nativní knihovny (dříve označovaná jako přístup Slim Binding) označuje vzor pro přístup k nativním sadám SDK v aplikacích .NET MAUI, včetně aplikací .NET pro Android, .NET pro iOS a .NET for Mac Catalyst. Cílem je vytvořit vlastní abstrakci nebo tenký "obálku" se zjednodušeným povrchem rozhraní API pro nativní sady SDK, které vás zajímají při volání z .NET. Nativní "obálkové" projekty/projekty architektury se vytvářejí v Android Studiu pomocí Javy,Kotlin a/nebo Xcode pomocí Objective-C/Swiftu. Tento přístup je zvlášť výhodný, když potřebujete jenom malý řez povrchu rozhraní API sady SDK, i když funguje dobře i pro větší využití povrchu rozhraní API stejně.

Koncepční přehled: NativeLibraryInterop

Vysvětlení, kdy a proč používat interoperabilitu nativní knihovny

Spolupráce nativní knihovny je velmi efektivní přístup k integraci s nativními knihovnami, i když nemusí být vždy nejvhodnější pro váš projekt. Obecně platí, že pokud už udržujete vazby a máte možnost pokračovat, není nutné měnit přístupy. U projektů vyžadujících rozsáhlé použití rozhraní API knihovny nebo pro dodavatele podporující vývojáře .NET MAUI můžou být tradiční vazby stále vhodnější. Spolupráce nativní knihovny ale nabízí alternativu, která je často srozumitelnější, implementovaná a udržovat.

Klíčovou výhodou spolupráce nativní knihovny je efektivita s jednoduchými povrchy rozhraní API. Pokud obálky zahrnují pouze primitivní typy, které .NET podporuje, stávající nástroje vazeb mohou generovat spolehlivé definice s minimálním ručním zásahem, což je často vyžadováno pro tradiční vazby. To usnadňuje proces, zejména proto, že implementace rozhraní API obálky obvykle sleduje dokumentaci sady SDK a často umožňuje přímé kopírování z dokumentace dodavatele.

I když může být počáteční instalace složitější, správa aktualizací základních sad SDK obvykle vyžaduje menší úsilí. Aktualizace často zahrnují jednoduchou úpravu verze a opětovné sestavení projektu. I když dojde k zásadním změnám v plochách rozhraní API nebo sadách SDK, je pravděpodobné, že povrch obálkového rozhraní API a využití aplikace .NET zůstanou stabilní a v porovnání s tradičními vazbami bude vyžadovat méně úprav.

V souhrnu poskytuje spolupráce nativní knihovny několik výhod:

  • Zjednodušuje následující dokumentaci sady SDK s nativními jazyky a nástroji.
  • Vyžaduje méně ručního zásahu při vytváření pracovních vazeb.
  • Usnadňuje údržbu a snižuje frekvenci potřebných aktualizací.
  • Vylepšuje izolaci aplikace před změnami v podkladových sadách SDK.

I když řešení řetězů závislostí (zejména v Androidu) může vyžadovat podobné úsilí jako tradiční vazby, zjednodušené výhody implementace a údržby poskytují nativní knihovně pro mnoho projektů atraktivní volbu.

Principy maui.NativeLibraryInterop

Nejdůležitější výzvou při vytváření a údržbě vazeb vytvořených prostřednictvím zprostředkovatele komunikace nativní knihovny je ruční propojení nativních projektů, jejich nativních závislostí, výstupů sestavení a projektu knihovny vazeb .NET. Maui.NativeLibraryInterop vám pomůže začít proces vytvořením a přizpůsobením ukázek pro potřeby vaší vlastní aplikace.

Součástí tohoto postupu je orchestrace částí procesu sestavení prostřednictvím vyvolání nástroje MSBuild. Může to zahrnovat:

  • Řešení nebo stažení nativních závislostí sady SDK
  • Sestavení nativního projektu štíhlé vazby a jeho závislostí
  • Přesunutí požadovaných nativních artefaktů do očekávaného pracovního adresáře
  • Generování definice rozhraní API pro projekt knihovny vazeb

Proces sestavení vazby se rozšíří, aby získal a sestavil nativní závislosti sady SDK přidáním CommunityToolkit.Maui.NativeLibraryInterop.BuildTasks balíčku NuGet do projektu vazby:

<ItemGroup>
    <PackageReference Include="CommunityToolkit.Maui.NativeLibraryInterop.BuildTasks" Version="0.0.1-pre1" />
</ItemGroup>

Projekty vazeb androidu @(NLIGradleProjectReference) přidají položku, která odkazuje na kořenovou složku, která obsahuje nativní projekt gradle obálky:

<ItemGroup>
    <NLIGradleProjectReference Include="../native" >
        <ModuleName>newbinding</ModuleName>
        <!-- Metadata applicable to @(AndroidLibrary) will be used if set, otherwise the following defaults will be used:
        <Bind>true</Bind>
        <Pack>true</Pack>
        -->
    </NLIGradleProjectReference>
</ItemGroup>

Projekty vazeb iOS přidají @(NLIXcodeProjectReference) položku, která odkazuje na nativní projekt wrapper Xcode:

<ItemGroup>
    <NLIXcodeProjectReference Include="../native/NewBinding/NewBinding.xcodeproj">
        <SchemeName>NewBinding</SchemeName>
        <SharpieNamespace>NewBinding</SharpieNamespace>
        <SharpieBind>true</SharpieBind>
        <!-- Metadata applicable to @(NativeReference) will be used if set, otherwise the following defaults will be used:
        <Kind>Framework</Kind>
        <SmartLink>true</SmartLink>
        -->
    </NLIXcodeProjectReference>
</ItemGroup>

Projekty vazeb androidu generují definici rozhraní API automaticky s ohledem na všechny volitelné ruční úpravy, jako jsou ty implementované prostřednictvím souboru transformace Metadata.xml .

Koncepční přehled: NativeLibraryInterop pro Android

Projekt knihovny vazeb pro iOS musí obsahovat explicitně definované rozhraní API. Aby vám to pomohlo, může být Objective-Sharpie spouštěna automaticky na výsledné nativní rozhraní, aby se vedle něj vytvořil definiční soubor rozhraní API (ApiDefinition.cs). To může sloužit jako užitečný odkaz při vytváření a údržbě souboru ApiDefintion.cs používaného projektem vazby pro iOS.

Koncepční přehled: NativeLibraryInterop pro iOS

Požadované nativní závislosti jsou vloženy do sestavení vazby. Když projekt .NET přidá odkaz na nativní projekt, nativní závislosti se do aplikace zahrnou automaticky.