Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Xamarin
  3. Modèle de compilation
Extrait - Xamarin Développez vos applications multiplateformes pour iOS, Android et Windows
Extraits du livre
Xamarin Développez vos applications multiplateformes pour iOS, Android et Windows Revenir à la page d'achat du livre

Modèle de compilation

Introduction

Xamarin permet de créer une application multiplateforme, mais nous verrons dans ce chapitre que sa façon de compiler les exécutables diffère en fonction de la plateforme.

Comment Xamarin crée-t-il des exécutables multiplateformes ?

Lorsque l’on compile une application en C#, le compilateur transforme le code C# en code MSIL (MicroSoft Intermediate Language). Puis, en fonction des plateformes, ce code est encore transformé pour créer un exécutable qui fonctionne sur la plateforme ciblée.

1. iOS et Android

a. Spécificité iOS

Apple a interdit l’exécution de code généré dynamiquement sur le périphérique. Contrairement à une application .NET normale, le code MSIL n’est donc pas transformé dynamiquement en code natif lors de la première exécution du programme.

Xamarin iOS ajoute une étape de compilation appelée AOT (Ahead-of-Time) qui compile ce code MSIL en code natif. Le binaire qui en résulte est très proche d’un binaire que l’on obtiendrait en compilant une application écrite en Objective C ou Swift.

images/3_2_1.png

Le fait de ne pas transformer le code MSIL en code natif à l’exécution permet aussi d’avoir une application plus rapide lors de son démarrage.

b. Spécificité Android

Contrairement à iOS, le modèle de compilation n’est pas de type AOT, mais de type JIT (Just-In-Time). Intégrée à Android depuis la version 2.2, la compilation JIT permet, sur le papier, de gagner en performance. La grosse différence entre les deux types est que l’AOT compile le programme avant qu’il ne soit exécuté alors que JIT compile le programme pendant qu’il s’exécute.

Il est néanmoins possible d’activer la compilation AOT pour Android pour générer son application en Release. Cela se fait au détriment de la taille du package généré, mais d’un lancement plus rapide de l’application au démarrage.

c. Activer LLVM

Il est conseillé en Release d’activer...

Le Linker

Lorsque vous compilez votre application, un outil appelé Linker permet de réduire la taille de vos applications. Cet outil supprime les classes et méthodes que l’application n’utilise pas. Cela permet de réduire la taille du binaire généré, qui n’est livré qu’avec le code strictement nécessaire.

Cependant, le Linker n’est pas parfait et il peut arriver qu’il supprime des classes ou des méthodes que vous utilisez. Notamment quand vous utilisez la réflexion, celui-ci n’arrive pas à déterminer que vous utilisez certaines classes et peut les supprimer par erreur.

1. iOS et Android

a. Configurer son Linker

Xamarin.iOS et Xamarin.Android permettent de choisir si le Linker est exécuté durant la compilation.

Par défaut en mode Debug, il n’est pas activé.

Dans l’onglet Build de votre projet, vous pouvez choisir son comportement parmi les trois options suivantes :

  • Dont Link : désactive entièrement le Linker.

  • Link Framework SDKs only : active uniquement le Linker sur le Framework et SDK. C’est l’option utilisée par défaut avec la configuration Release.

  • Link All : le Linker va essayer de réduire la taille de votre code ainsi que celui de Framework SDK. Cette option permet d’avoir les exécutables de la plus petite taille possible.

Il est important...

Conclusion

La compilation est assez proche entre les différentes plateformes. Il ne faut pas sous-estimer les options de génération, car celles-ci peuvent apporter un gros bénéfice à votre application finale.

Notez qu’il existe d’autres options que nous n’avons pas abordées et qui permettent d’aller plus loin dans l’optimisation de votre application.