Partager via


Processus de création

Le processus de génération .NET pour Android est responsable du collage de tout : générer, prendre Resource.designer.csen charge les @(AndroidAsset)actions de @(AndroidResource)génération et d’autres actions de génération, générer des wrappers pouvant appeler Android et générer une .apk exécution sur des appareils Android.

Packages d’application

En termes généraux, il existe deux types de packages d’applications Android (.apk fichiers) que le système de génération .NET pour Android peut générer :

  • Les builds de mise en production , qui sont entièrement autonomes et qui ne nécessitent pas d’exécution de packages supplémentaires. Il s’agit des packages fournis à un App Store.

  • Des versions Debug, qui ne le sont pas.

Ces types de package correspondent à MSBuild Configuration qui produit le package.

Déploiement rapide

Le déploiement rapide fonctionne en réduisant davantage la taille du package d’application Android. Pour ce faire, excluez les assemblys de l’application du package et déployez plutôt les assemblys de l’application directement dans le répertoire interne files de l’application, généralement situé dans /data/data/com.some.package. Le répertoire interne files n’est pas un dossier accessible en écriture globale. L’outil run-as est donc utilisé pour exécuter toutes les commandes pour copier les fichiers dans ce répertoire.

Ce processus accélère le cycle de génération/déploiement/débogage, car le package n’est pas réinstallé lorsque seuls les assemblys sont modifiés. Seuls les assemblys mis à jour sont resynchronisés sur l’appareil cible.

Avertissement

Le déploiement rapide est connu pour échouer sur les appareils qui bloquent run-as, ce qui inclut souvent des appareils antérieurs à Android 5.0.

Le déploiement rapide est activé par défaut et peut être désactivé dans les versions Debug en définissant la propriété $(EmbedAssembliesIntoApk) sur True.

Le mode Déploiement rapide amélioré peut être utilisé conjointement avec cette fonctionnalité pour accélérer encore davantage les déploiements. Cela déploie les deux assemblys, bibliothèques natives, typesmaps et dexes dans le files répertoire. Toutefois, vous devez uniquement l’activer si vous modifiez des bibliothèques natives, des liaisons ou du code Java.

Projets MSBuild

Le processus de génération .NET pour Android est basé sur MSBuild, qui est également le format de fichier projet utilisé par Visual Studio pour Mac et Visual Studio. En règle générale, les utilisateurs n’auront pas besoin de modifier les fichiers MSBuild en main : l’IDE crée des projets entièrement fonctionnels et les met à jour avec les modifications apportées et appelle automatiquement des cibles de build en fonction des besoins.

Les utilisateurs avancés peuvent néanmoins souhaiter effectuer des opérations non prises en charge par l’interface graphique utilisateur de l’IDE : le processus de génération est donc personnalisable en modifiant le fichier projet directement. Cette page documente uniquement les fonctionnalités et personnalisations spécifiques à .NET pour Android. De nombreuses autres choses sont possibles avec les éléments, propriétés et cibles MSBuild normaux.

Projets de liaison

Les propriétés MSBuild suivantes sont utilisées avec les projets de liaison :

Resource.designer.cs Génération

Les propriétés MSBuild suivantes sont utilisées pour contrôler la génération du Resource.designer.cs fichier :

Propriétés de signature

Les propriétés de signature contrôlent comment le package d’application est signé pour qu’il puisse être installé sur un appareil Android. Pour permettre une itération de build plus rapide, les tâches .NET pour Android ne signent pas les packages pendant le processus de génération, car la signature est assez lente. Au lieu de cela, les packages sont signés (si nécessaire) avant l’installation ou pendant l’exportation, par l’IDE ou par la cible de génération Install. Le fait d’appeler la cible SignAndroidPackage produit un package avec le suffixe -Signed.apk dans le répertoire de sortie.

Par défaut, la cible de signature génère si nécessaire une nouvelle clé de signature de débogage. Si vous souhaitez utiliser une clé spécifique, par exemple sur un serveur de build, les propriétés MSBuild suivantes sont utilisées :

keytool Mappage d’options

Considérez l’appel suivant keytool :

$ keytool -genkey -v -keystore filename.keystore -alias keystore.alias -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password: keystore.filename password
Re-enter new password: keystore.filename password
...
Is CN=... correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: ...
Enter key password for keystore.alias
        (RETURN if same as keystore password): keystore.alias password
[Storing filename.keystore]

Pour utiliser le magasin de clés généré ci-dessus, utilisez le groupe de propriétés :

<PropertyGroup>
    <AndroidKeyStore>True</AndroidKeyStore>
    <AndroidSigningKeyStore>filename.keystore</AndroidSigningKeyStore>
    <AndroidSigningStorePass>keystore.filename password</AndroidSigningStorePass>
    <AndroidSigningKeyAlias>keystore.alias</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>keystore.alias password</AndroidSigningKeyPass>
</PropertyGroup>

Créer des points d’extension

Le système de build .NET pour Android expose quelques points d’extension publics pour les utilisateurs qui souhaitent se connecter à notre processus de génération. Pour utiliser l’un de ces points d’extension, vous devez ajouter votre cible personnalisée à la propriété MSBuild appropriée dans un PropertyGroup. Par exemple :

<PropertyGroup>
   <AfterGenerateAndroidManifest>
      $(AfterGenerateAndroidManifest);
      YourTarget;
   </AfterGenerateAndroidManifest>
</PropertyGroup>

Les points d’extension sont les suivants :

Un mot de prudence sur l’extension du processus de génération : s’il n’est pas écrit correctement, les extensions de build peuvent affecter vos performances de build, en particulier si elles s’exécutent sur chaque build. Il est vivement recommandé de lire la documentation MSBuild avant d’implémenter ces extensions.

Définitions de cibles

Les parties spécifiques à .NET pour Android du processus de génération sont définies dans $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets, mais des cibles spécifiques au langage normales telles que Microsoft.CSharp.targets sont également requises pour générer l’assembly.

Les propriétés de génération suivantes doivent être définies avant l’importation des cibles de langage :

<PropertyGroup>
  <TargetFrameworkIdentifier>MonoDroid</TargetFrameworkIdentifier>
  <MonoDroidVersion>v1.0</MonoDroidVersion>
  <TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>

Toutes ces cibles et propriétés peuvent être incluses pour C# en important Xamarin.Android.CSharp.targets :

<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

Ce fichier peut être facilement adapté pour d’autres langages.