Interopérabilité des bibliothèques natives
Vue d’ensemble
L’interopérabilité des bibliothèques natives (anciennement appelée approche « Liaisons légères ») fait référence à un modèle permettant d’accéder à des SDK natifs dans des applications .NET MAUI, notamment les applications .NET pour Android, .NET pour iOS et .NET pour Mac Catalyst. L’idée est de créer votre propre abstraction ou votre propre « wrapper » léger avec une surface d’API simplifiée pour les Kits de développement logiciel (SDK) natifs que vous voulez appeler depuis .NET. Les projets de bibliothèque/framework du « wrapper » natif sont créés dans Android Studio avec Java/Kotlin et/ou Xcode avec Objective-C/Swift. Cette approche est particulièrement avantageuse quand vous avez seulement besoin d’une petite partie de la surface d’API du Kit de développement logiciel (SDK), bien qu’elle fonctionne également bien pour l’utilisation d’une surface plus étendue de l’API.
Comprendre quand et pourquoi utiliser l’interopérabilité des bibliothèques natives
L’interopérabilité des bibliothèque natives est une approche très efficace de l’intégration à des bibliothèques natives, bien qu’elle ne soit pas toujours la meilleure solution pour votre projet. En règle générale, si vous gérez déjà des liaisons et que vous cela vous convient de continuer à le faire, il n’est pas nécessaire de changer d’approche. Pour les projets nécessitant une utilisation étendue de l’API d’une bibliothèque ou pour les fournisseurs prenant en charge le développement avec .NET MAUI, les liaisons traditionnelles peuvent encore être plus adaptées. L’interopérabilité des bibliothèques natives offre cependant une alternative qui est souvent plus facile à comprendre, à implémenter et à gérer.
Un avantage clé de l’interopérabilité des bibliothèques natives est son efficacité avec des surfaces d’API simples. Quand des wrappers impliquent seulement des types primitifs pris en charge par .NET, les outils de liaison existants peuvent générer des définitions fiables avec une intervention manuelle minimale, qui est souvent nécessaire pour les liaisons traditionnelles. Ceci rend le processus simple, en particulier dans la mesure où l’implémentation de l’API du wrapper suit généralement la documentation du Kit de développement logiciel (SDK) et permet souvent une copie directe depuis la documentation du fournisseur.
Bien que la configuration initiale puisse être plus complexe, la gestion des mises à jour des Kits de développement logiciel (SDK) sous-jacents demande généralement moins de travail. Les mises à jour impliquent souvent d’ajuster simplement la version, puis de relancer une build du projet. Même si des changements cassants se produisent dans les surfaces d’API ou dans les Kits de développement logiciel (SDK), la surface de l’API du wrapper et l’utilisation de l’application .NET sont plus susceptibles de rester stables, nécessitant moins d’ajustements par rapport aux liaisons traditionnelles.
En résumé, l’interopérabilité des bibliothèques natives offre plusieurs avantages :
- Elle simplifie la documentation du Kit de développement logiciel (SDK) suivante avec des langages et des outils natifs
- Elle nécessite moins d’intervention manuelle pour créer des liaisons qui fonctionnent
- Elle facilite la maintenance et réduit la fréquence des mises à jour nécessaires
- Elle améliore l’isolation de l’application par rapport aux modifications apportées aux Kits de développement logiciel (SDK) sous-jacents
Bien que la résolution des chaînes de dépendances (en particulier sur Android) puisse nécessiter un effort similaire à celui des liaisons traditionnelles, les avantages liés à une implémentation et une maintenance simplifiées font de l’interopérabilité des bibliothèques natives un choix attrayant pour de nombreux projets.
Présentation de Maui.NativeLibraryInterop
Une problématique notable liée à la création et à la maintenance de liaisons créées via l’interopérabilité des bibliothèques natives est de fusionner manuellement les projets natifs, leurs dépendances natives, les résultats de leur build et le projet de bibliothèque de liaisons .NET. Maui.NativeLibraryInterop vous aide à démarrer le processus en créant et en personnalisant les exemples pour les besoins de votre propre application.
Il s’agit notamment d’orchestrer certaines parties du processus de build via des appels à MSBuild. Cela peut inclure :
- Résolution ou téléchargement des dépendances du Kit de développement logiciel (SDK) natif
- Création du projet de liaison légère native et de ses dépendances
- Déplacement des artefacts natifs requis vers le répertoire de travail attendu
- Génération de la définition d’API pour le projet de bibliothèque de liaisons
Le processus de création des liaisons est étendu pour obtenir et créer des dépendances du Kit de développement logiciel (SDK) natif en ajoutant le package NuGet CommunityToolkit.Maui.NativeLibraryInterop.BuildTasks
à votre projet de liaison :
<ItemGroup>
<PackageReference Include="CommunityToolkit.Maui.NativeLibraryInterop.BuildTasks" Version="0.0.1-pre1" />
</ItemGroup>
Les projets de liaison Android vont ajouter un élément @(NLIGradleProjectReference)
qui pointe vers le dossier racine contenant le projet Gradle du wrapper natif :
<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>
Les projets de liaison iOS vont ajouter un élément @(NLIXcodeProjectReference)
qui pointe vers le projet Xcode du wrapper natif :
<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>
Les projets de liaison Android génèrent automatiquement la définition de l’API en tenant compte des modifications manuelles facultatives telles que celles implémentées via le fichier de transformation Metadata.xml.
Un projet de bibliothèque de liaison iOS doit inclure une API définie explicitement. Pour vous aider à faire cela, Objective-Sharpie peut être exécuté automatiquement sur le framework natif résultant pour produire en parallèle un fichier de définition d’API (ApiDefinition.cs). Celui-ci peut servir de référence utile lors de la création et de la gestion du fichier ApiDefintion.cs utilisé par le projet de liaison iOS.
Les dépendances natives requises sont incorporées dans l’assembly de liaison. Quand un projet .NET ajoute une référence au projet natif, les dépendances natives sont incluses automatiquement dans l’application.
.NET MAUI Community Toolkit