Publier une application Android à l’aide de la ligne de commande

Pour distribuer une application Android .NET Multiplateforme (.NET MAUI), vous devez la signer avec une clé à partir de votre magasin de clés. Un magasin de clés est une base de données de certificats de sécurité créés à l’aide keytool du Kit de développement Java (JDK). Un magasin de clés est requis lors de la publication d’une application Android .NET MAUI, car Android n’exécute pas d’applications qui n’ont pas été signées.

Créer un fichier de magasin de clés

Pendant le développement, .NET Android utilise un magasin de clés de débogage pour signer l’application, ce qui lui permet d’être déployé directement sur un émulateur ou sur des appareils configurés pour exécuter des applications débogueables. Toutefois, ce magasin de clés n’est pas reconnu comme un magasin de clés valide à des fins de distribution d’applications. Par conséquent, un magasin de clés privé doit être créé et utilisé pour signer des builds de mise en production. Il s’agit d’une étape qui ne doit être effectuée qu’une seule fois, car la même clé sera utilisée pour publier des mises à jour et peut être utilisée pour signer d’autres applications. Après avoir généré un fichier de magasin de clés, vous fournissez ses détails à partir de la ligne de commande lors de la génération de l’application ou configurez votre fichier projet pour le référencer.

Procédez comme suit pour créer un fichier de magasin de clés :

  1. Ouvrez un terminal et accédez au dossier de votre projet.

    Conseil

    Si Visual Studio est ouvert, utilisez le menu Afficher>le terminal pour ouvrir un terminal à l’emplacement de la solution ou du projet. Accédez au dossier du projet.

  2. Exécutez l’outil keytool avec les paramètres suivants :

    keytool -genkeypair -v -keystore {filename}.keystore -alias {keyname} -keyalg RSA -keysize 2048 -validity 10000
    

    Important

    Si plusieurs versions du JDK sont installées sur votre ordinateur, vérifiez que vous exécutez keytool à partir de la dernière version du JDK.

    Vous serez invité à fournir et confirmer un mot de passe, suivi du nom complet, de l’unité d’organisation, de l’organisation, de la ville ou de la localité, de l’état ou de la province et du code du pays. Ces informations ne s’affichent pas dans votre application, mais sont incluses dans votre certificat.

    Par exemple, pour générer un fichier myapp.keystore dans le même dossier que votre projet, avec un alias de myapp, utilisez la commande suivante :

    keytool -genkeypair -v -keystore myapp.keystore -alias myapp -keyalg RSA -keysize 2048 -validity 10000
    

    Conseil

    Sauvegardez votre magasin de clés et votre mot de passe. Si vous le perdez, vous ne pourrez pas signer votre application avec la même identité de signature.

Rechercher la signature de votre magasin de clés

Pour répertorier les clés stockées dans un magasin de clés, utilisez keytool l’option -list suivante :

keytool -list -keystore {filename}.keystore

Par exemple, pour répertorier les clés d’un magasin de clés nommé myapp.keystore, utilisez la commande suivante :

keytool -list -keystore myapp.keystore

Créer et signer votre application

Pour générer votre application à partir de la ligne de commande et la signer à l’aide de votre magasin de clés, ouvrez un terminal et accédez au dossier de votre projet d’application .NET MAUI. Exécutez la dotnet publish commande, en fournissant les paramètres suivants :

Paramètre Valeur
-f ou --framework Framework cible, c’est-à-dire net8.0-android.
-c ou --configuration Configuration de build, qui est Release.

Avertissement

La tentative de publication d’une solution .NET MAUI entraîne la dotnet publish commande qui tente de publier chaque projet dans la solution individuellement, ce qui peut entraîner des problèmes lorsque vous avez ajouté d’autres types de projets à votre solution. Par conséquent, la dotnet publish commande doit être étendue à votre projet d’application .NET MAUI.

Des paramètres de build supplémentaires peuvent être spécifiés sur la ligne de commande, s’ils ne sont pas fournis dans un <PropertyGroup> fichier projet. Le tableau suivant répertorie certains des paramètres courants :

Paramètre Valeur
-p:ApplicationTitle Nom visible par l’utilisateur pour l’application.
-p:ApplicationId Identificateur unique de l’application, tel que com.companyname.mymauiapp.
-p:ApplicationVersion Version de la build qui identifie une itération de l’application.
-p:ApplicationDisplayVersion Numéro de version de l’application.
-p:AndroidKeyStore Valeur booléenne qui indique si l’application doit être signée. La valeur par défaut est false.
-p:AndroidPackageFormats Propriété délimitée par des points-virgules qui indique si vous souhaitez empaqueter l’application en tant que fichier APK ou AAB. Définissez sur l’un aab ou l’autre pour apk générer un seul format. La valeur par défaut pour les builds de mise en production est aab;apk.
-p:AndroidSigningKeyAlias Alias de la clé dans le magasin de clés. Il s’agit de la keytool -alias valeur utilisée lors de la création du magasin de clés.
-p:AndroidSigningKeyPass Mot de passe de la clé dans le fichier de magasin de clés. Il s’agit de la valeur fournie keytool lors de la création du fichier de magasin de clés et vous êtes invité à entrer le mot de passe du magasin de clés. Cela est dû au fait que le type de magasin de clés par défaut suppose que le mot de passe de clé et le mot de passe du magasin de clés sont identiques. Cette propriété prend également en charge env: et file: préfixes qui peuvent être utilisés pour spécifier une variable d’environnement ou un fichier qui contient le mot de passe. Ces options permettent d’empêcher l’affichage du mot de passe dans les journaux de build.
-p:AndroidSigningKeyStore Nom de fichier du magasin de clés créé par keytool. Il s’agit de la keytool -keystore valeur utilisée lors de la création du magasin de clés.
-p:AndroidSigningStorePass Mot de passe du fichier de magasin de clés. Il s’agit de la valeur fournie keytool lors de la création du fichier de magasin de clés et vous êtes invité à entrer le mot de passe du magasin de clés. Cela est dû au fait que le type de magasin de clés par défaut suppose que le mot de passe du magasin de clés et le mot de passe de clé sont identiques. Cette propriété prend également en charge env: et file: préfixes qui peuvent être utilisés pour spécifier une variable d’environnement ou un fichier qui contient le mot de passe. Ces options permettent d’empêcher l’affichage du mot de passe dans les journaux de build.
-p:PublishTrimmed Valeur booléenne qui indique si l’application doit être supprimée. La valeur par défaut est true pour les builds de mise en production.

Vous devez utiliser le même mot de passe que les valeurs des paramètres et AndroidSigningStorePass des AndroidSigningKeyPass paramètres.

Pour obtenir la liste complète des propriétés de build, consultez Propriétés de build.

Important

Les valeurs de ces paramètres ne doivent pas être fournies sur la ligne de commande. Ils peuvent également être fournis dans le fichier projet. Lorsqu’un paramètre est fourni sur la ligne de commande et dans le fichier projet, le paramètre de ligne de commande est prioritaire. Pour plus d’informations sur la fourniture de propriétés de build dans votre fichier projet, consultez Définir les propriétés de build dans votre fichier projet.

Exécutez la dotnet publish commande avec les paramètres suivants pour générer et signer votre application :

dotnet publish -f net8.0-android -c Release -p:AndroidKeyStore=true -p:AndroidSigningKeyStore={filename}.keystore -p:AndroidSigningKeyAlias={keyname} -p:AndroidSigningKeyPass={password} -p:AndroidSigningStorePass={password}

Remarque

Dans .NET 8, la dotnet publish commande est par défaut dans la Release configuration. Par conséquent, la configuration de build peut être omise à partir de la ligne de commande.

Par exemple, utilisez la commande suivante pour générer et signer votre application à l’aide du magasin de clés créé précédemment :

dotnet publish -f net8.0-android -c Release -p:AndroidKeyStore=true -p:AndroidSigningKeyStore=myapp.keystore -p:AndroidSigningKeyAlias=myapp -p:AndroidSigningKeyPass=mypassword -p:AndroidSigningStorePass=mypassword

Les propriétés et la AndroidSigningKeyPass prise en charge env: et AndroidSigningStorePassfile: les préfixes qui peuvent être utilisés pour spécifier une variable d’environnement ou un fichier qui contient le mot de passe. La spécification du mot de passe de cette façon empêche son affichage dans les journaux de build. Par exemple, pour utiliser une variable d’environnement nommée AndroidSigningPassword:

dotnet publish -f net8.0-android -c Release -p:AndroidKeyStore=true -p:AndroidSigningKeyStore=myapp.keystore -p:AndroidSigningKeyAlias=myapp -p:AndroidSigningKeyPass=env:AndroidSigningPassword -p:AndroidSigningStorePass=env:AndroidSigningPassword

Important

Env : le préfixe n’est pas pris en charge lorsqu’il $(AndroidPackageFormat) est défini sur aab.

Pour utiliser un fichier situé dans C :\Users\user1\AndroidSigningPassword.txt :

dotnet publish -f net8.0-android -c Release -p:AndroidKeyStore=true -p:AndroidSigningKeyStore=myapp.keystore -p:AndroidSigningKeyAlias=myapp -p:AndroidSigningKeyPass=file:C:\Users\user1\AndroidSigningPassword.txt -p:AndroidSigningStorePass=file:C:\Users\user1\AndroidSigningPassword.txt

La publication de builds et de signes de l’application, puis copie les fichiers AAB et APK dans le dossier bin\Release\net8.0-android\publish . Il existe deux fichiers AAB : un non signé et un autre signé. La variante signée a -sign in the file name.

Pour plus d’informations sur la dotnet publish commande, consultez dotnet publish.

Remarque

Pour les applications Android, dotnet build vous pouvez également utiliser cette option pour générer et signer votre application. Toutefois, les fichiers AAB et APK sont créés dans le dossier bin\Release\net8.0-android plutôt que dans le sous-dossier de publication . dotnet build est également défini par défaut sur une Debug configuration. Par conséquent, le -c paramètre est requis pour spécifier la Release configuration.

Définir les propriétés de build dans votre fichier projet

Une alternative à la spécification des paramètres de build sur la ligne de commande consiste à les spécifier dans votre fichier projet dans un <PropertyGroup>. Le tableau suivant répertorie certaines des propriétés de build courantes :

Propriété Valeur
<ApplicationTitle> Nom visible par l’utilisateur pour l’application.
<ApplicationId> Identificateur unique de l’application, tel que com.companyname.mymauiapp.
<ApplicationVersion> Version de la build qui identifie une itération de l’application.
<ApplicationDisplayVersion> Numéro de version de l’application.
<AndroidKeyStore> Valeur booléenne qui indique si l’application doit être signée. La valeur par défaut est false.
<AndroidPackageFormats> Propriété délimitée par des points-virgules qui indique si vous souhaitez empaqueter l’application en tant que fichier APK ou AAB. Définissez sur l’un aab ou l’autre pour apk générer un seul format. La valeur par défaut pour les builds de mise en production est aab;apk.
<AndroidSigningKeyAlias> Alias de la clé dans le magasin de clés. Il s’agit de la keytool -alias valeur utilisée lors de la création du magasin de clés.
<AndroidSigningKeyPass> Mot de passe de la clé dans le fichier de magasin de clés. Il s’agit de la valeur fournie keytool lors de la création du fichier de magasin de clés et vous êtes invité à entrer le mot de passe du magasin de clés. Cela est dû au fait que le type de magasin de clés par défaut suppose que le mot de passe de clé et le mot de passe du magasin de clés sont identiques. Cette propriété prend également en charge env: et file: préfixes qui peuvent être utilisés pour spécifier une variable d’environnement ou un fichier qui contient le mot de passe. Ces options permettent d’empêcher l’affichage du mot de passe dans les journaux de build.
<AndroidSigningKeyStore> Nom de fichier du magasin de clés créé par keytool. Il s’agit de la keytool -keystore valeur utilisée lors de la création du magasin de clés.
<AndroidSigningStorePass> Mot de passe du fichier de magasin de clés. Il s’agit de la valeur fournie keytool lors de la création du fichier de magasin de clés et vous êtes invité à entrer le mot de passe du magasin de clés. Cela est dû au fait que le type de magasin de clés par défaut suppose que le mot de passe du magasin de clés et le mot de passe de clé sont identiques. Cette propriété prend également en charge env: et file: préfixes qui peuvent être utilisés pour spécifier une variable d’environnement ou un fichier qui contient le mot de passe. Ces options permettent d’empêcher l’affichage du mot de passe dans les journaux de build.
<PublishTrimmed> Valeur booléenne qui indique si l’application doit être supprimée. La valeur par défaut est true pour les builds de mise en production.

Pour obtenir la liste complète des propriétés de build, consultez Propriétés de build.

Important

Les valeurs de ces propriétés de build ne doivent pas être fournies dans le fichier projet. Ils peuvent également être fournis sur la ligne de commande lorsque vous publiez l’application. Cela vous permet d’omettre des valeurs spécifiques à partir de votre fichier projet.

L’exemple suivant montre un groupe de propriétés classique pour la création et la signature de votre application Android :

<PropertyGroup Condition="$(TargetFramework.Contains('-android')) and '$(Configuration)' == 'Release'">
    <AndroidSigningKeyStore>myapp.keystore</AndroidSigningKeyStore>
    <AndroidSigningKeyAlias>myapp</AndroidSigningKeyAlias>
</PropertyGroup>

Cet exemple <PropertyGroup> ajoute une condition case activée, empêchant ces paramètres d’être traités, sauf si la condition case activée passe. La condition case activée recherche deux éléments :

  1. L’infrastructure cible est définie sur quelque chose contenant le texte -android.
  2. La configuration de build est définie sur Release.

Si l’une de ces conditions échoue, les paramètres ne sont pas traités. Plus important encore, les paramètres et <AndroidSigningKeyAlias> les <AndroidSigningKeyStore> paramètres ne sont pas définis, ce qui empêche la signature de l’application.

Pour des raisons de sécurité, vous ne devez pas fournir de valeur pour <AndroidSigningKeyPass> et <AndroidSigningStorePass> dans le fichier projet. Vous pouvez fournir ces valeurs sur la ligne de commande lorsque vous publiez l’application, ou utiliser les préfixes ou file: les env: préfixes pour empêcher l’affichage du mot de passe dans les journaux de build. Par exemple, pour utiliser une variable d’environnement nommée AndroidSigningPassword:

<PropertyGroup Condition="$(TargetFramework.Contains('-android')) and '$(Configuration)' == 'Release'">
    <AndroidSigningKeyStore>myapp.keystore</AndroidSigningKeyStore>
    <AndroidSigningKeyAlias>myapp</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>env:AndroidSigningPassword</AndroidSigningKeyPass>
    <AndroidSigningStorePass>env:AndroidSigningPassword</AndroidSigningStorePass>
</PropertyGroup>

Important

Env : le préfixe n’est pas pris en charge lorsqu’il $(AndroidPackageFormat) est défini sur aab.

Vous pouvez également utiliser un fichier situé dans C :\Users\user1\AndroidSigningPassword.txt :

<PropertyGroup Condition="$(TargetFramework.Contains('-android')) and '$(Configuration)' == 'Release'">
    <AndroidSigningKeyStore>myapp.keystore</AndroidSigningKeyStore>
    <AndroidSigningKeyAlias>key</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningKeyPass>
    <AndroidSigningStorePass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningStorePass>
</PropertyGroup>

Distribuer l’application

Le fichier APK ou AAB signé peut être distribué avec l’une des approches suivantes :

  • L’approche la plus courante de la distribution d’applications Android aux utilisateurs consiste à utiliser Google Play. Google Play exige que vous envoyiez votre application en tant que bundle d’applications Android (AAB). Pour plus d’informations, consultez Charger votre application dans la console Play sur developer.android.com
  • Les fichiers APK peuvent être distribués aux appareils Android via un site web ou un serveur. Lorsque les utilisateurs accèdent à un lien de téléchargement à partir de leur appareil Android, le fichier est téléchargé. Android démarre automatiquement son installation sur l’appareil, si l’utilisateur a configuré ses paramètres pour autoriser l’installation des applications à partir de sources inconnues. Pour plus d’informations sur l’autorisation d’applications provenant de sources inconnues, consultez l’option Utilisateur pour les applications et sources inconnues sur developer.android.com.

Voir aussi

  • À propos des offres groupées d’applications Android sur developer.android.com