Compiler un app bundle signé
Compiler l’application web
Lancez votre build web de production (pour la plupart des projets Ionic Angular, React et Vue,
npm run build) afin que le dossier défini commewebDirdans la configuration Capacitor soit à jour.Synchroniser vers Android
npx cap sync androidcopie le build web dans le projet natif et met à jour les plugins natifs. Sans cette étape, vous publiez le JavaScript de la veille.Ouvrir Android Studio
Lancez
npx cap open android.Générer le bundle
Choisissez Build → Generate Signed Bundle/APK, sélectionnez Android App Bundle, choisissez ou créez votre keystore, la variante release, puis cliquez sur Create.
npm run build
npx cap sync android
npx cap open androidVous préférez la ligne de commande ou la CI ? npx cap build android produit un bundle signé avec --androidreleasetype AAB et les options de keystore. Passez les mots de passe via des variables d’environnement, pas via un fichier versionné :
npx cap build android --androidreleasetype AAB \
--keystorepath ../upload-keystore.jks --keystorealias upload \
--keystorepass "$KEYSTORE_PASS" --keystorealiaspass "$KEY_PASS"Clé d’importation et signature d’application Play
Google Play exige la signature d’application Play pour les nouvelles applications. Le keystore que vous créez dans l’assistant d’Android Studio (Create new) ou que vous passez à npx cap build est votre clé d’importation ; Google conserve la clé de signature de l’application, distincte, après votre premier import.
Android Studio recommande une validité d’au moins 25 ans pour une nouvelle clé. Rangez le fichier .jks hors du dossier android/ au cas où vous régénéreriez le projet natif, et sauvegardez-le avec les deux mots de passe. Si la clé d’importation est perdue, vous pouvez demander sa réinitialisation dans la Play Console.
Si vous gardez des options de build dans la configuration Capacitor, n’écrivez pas les mots de passe dans le fichier versionné. La configuration fait partie de votre dépôt.
Code de version et niveau d’API cible
Capacitor ne lit pas la version dans package.json. Les valeurs que voit Google Play se trouvent dans android/app/build.gradle ; augmentez versionCode avant chaque import :
android {
defaultConfig {
versionCode 2
versionName "1.0.1"
}
}Depuis le 31 août 2026, les nouvelles applications et mises à jour doivent cibler Android 16 (niveau d’API 36). Capacitor définit targetSdkVersion dans android/variables.gradle, et chaque version majeure n’accepte qu’une seule valeur : Capacitor 8 utilise 36, Capacitor 7 utilise 35. Les valeurs personnalisées ne sont pas prises en charge : pour atteindre l’API 36, passez à Capacitor 8 avec vos plugins plutôt que de modifier le nombre.
ext {
// ...
targetSdkVersion = 36
}Pièges Ionic et Capacitor
- Live reload oublié. Un
server.urldans la configuration Capacitor fait charger à l’application l’adresse de votre machine de développement. Les testeurs voient un écran blanc. Supprimez-le avant le build de release. - Ressources web périmées. Générer le bundle dans Android Studio sans lancer
npx cap sync androidd’abord publie le build web précédent. - Plugins sur une autre version majeure. Tous les paquets
@capacitor/*et plugins communautaires doivent avoir la même version majeure que@capacitor/android. Sinon : erreurs de build natif ou plantages à l’exécution. - Requêtes en clair. Android bloque par défaut le trafic
http://non chiffré. Les builds de production ne doivent appeler que des API HTTPS. - Plugins natifs et pages de 16 Ko. Les plugins qui embarquent des bibliothèques
.sodoivent prendre en charge les pages mémoire de 16 Ko. La Play Console le signale et, à partir du 1er février 2027, les mises à jour non compatibles ne pourront plus être publiées. - Tester seulement dans le navigateur. Le bouton retour, les autorisations et les liens profonds se comportent autrement dans la WebView Android. Installez le build de release sur un vrai appareil avant l’import.
Déboguer ce que les testeurs voient dans la WebView
La plupart des problèmes d’un build release Capacitor se trouvent dans la couche web : les outils du navigateur que vous connaissez déjà sont donc la meilleure porte d’entrée. Dans un build release, ils sont désactivés : webContentsDebuggingEnabled vaut false par défaut, et la journalisation de Capacitor suit loggingBehavior, dont la valeur par défaut est debug, si bien que les builds release restent muets.
Reproduisez sur un build debug
Lancez l’application sur un téléphone depuis Android Studio, ouvrez
chrome://inspectdans Chrome sur votre ordinateur et choisissez la WebView. Vous disposez de la console, du panneau réseau et des points d’arrêt pour votre code web.edge://inspectfonctionne de la même façon dans Edge.N’inspectez un build release qu’en local
Si un bug n’apparaît qu’en release, passez temporairement
webContentsDebuggingEnabledàtruedans un build que vous installez vous-même. N’importez jamais ce build : il rend le contenu web de votre application débogable sur n’importe quel appareil.Récupérez les plantages natifs dans la Play Console
Les plantages dans le code Java de Capacitor ou dans les plug-ins natifs apparaissent sous Surveiller et améliorer → Android Vitals → Plantages et ANR. Avec R8 activé, le fichier de mapping inclus dans le
.aables rend lisibles.
const config: CapacitorConfig = {
// ...
android: {
// Never ship this to Google Play
webContentsDebuggingEnabled: true,
},
};Demandez aux testeurs le modèle de l’appareil, la version d’Android et la version d’Android System WebView. Beaucoup de bugs propres à la WebView dépendent de ce dernier numéro, et tout ce qui est inférieur à android.minWebViewVersion sort de ce que votre application prend en charge.
La Play Console en bref : du test fermé à la production
Une fois votre bundle Ionic / Capacitor compilé et signé, la suite se passe dans la Play Console et fonctionne de la même manière pour tous les frameworks. Voici la liste de contrôle ; chaque menu et chaque écran sont décrits dans le guide Play Console complet.
- Terminez la configuration de l’application dans le tableau de bord : règles de confidentialité, accès à l’application, annonces, classification du contenu, audience cible, sécurité des données et fiche Play Store.
- Créez une release de test fermé sous Tester et publier → Tests → Test fermé : choisissez les pays de vos testeurs, importez le
.aabet envoyez-le en examen. - Ajoutez les testeurs avec un Google Group dans l’onglet Testeurs et partagez le lien d’inscription. Il fonctionne dès que le canal affiche Publié.
- Gardez au moins 12 testeurs inscrits pendant 14 jours d’affilée. Les tests internes ne comptent pas, et une personne qui part puis revient recommence ses 14 jours.
- Publiez au moins une mise à jour pendant le test et notez ce que les testeurs ont trouvé et ce que vous avez modifié.
- Demandez l’accès en production depuis le tableau de bord et répondez aux trois sections sur votre test, votre application et votre préparation. La décision revient à Google ; personne ne peut garantir l’approbation.
Prévoyez des départs : recrutez plus de 12 testeurs pour qu’un abandon ne retarde pas votre calendrier. Voir toutes les étapes Play Console.
Le guide Play Console complet
Canal fermé, Google Group et lien d’inscription, règle des 12 testeurs / 14 jours et demande d’accès en production, étape par étape sur une seule page.
Livrer des correctifs, et la place des mises à jour à chaud
Recompilez l’application web, synchronisez, augmentez versionCode et générez un nouveau bundle signé pour le même canal fermé :
npm run build
npx cap sync android
npx cap open androidLa règle Google Play sur l’usage abusif des appareils et des réseaux interdit à une application de se mettre à jour en dehors de Google Play, avec une exception pour le code exécuté dans un interpréteur ou une machine virtuelle, comme le JavaScript dans une WebView. C’est pour cela qu’il existe des services de mise à jour à chaud pour la couche web. Le code natif, les plug-ins et les autorisations exigent toujours un nouveau bundle via Google Play.
Pendant le test fermé, un nouveau versionCode dans le canal fermé reste la voie la plus directe : il est examiné, les testeurs le reçoivent via Google Play et il apparaît dans l’historique des releases. Si vous utilisez aussi un service de mise à jour à chaud, réservez-le aux vrais correctifs et gardez le build web du canal fermé synchronisé avec lui.
- Attention au minimum WebView.
android.minWebViewVersionvaut60par défaut et ne peut pas descendre sous55. Les testeurs en difficulté doivent d’abord mettre à jour Android System WebView depuis Google Play. - Pas de contenu mixte.
android.allowMixedContentest désactivé par défaut et n’est pas prévu pour la production. Servez chaque API et chaque ressource en HTTPS, et laissezserver.cleartextà sa valeur par défautfalse. - Synchronisez avant chaque build. Chaque correctif nécessite
npx cap sync androidaprès le build web, sinon le nouveau bundle contient encore l’ancien JavaScript.
Questions fréquentes
Puis-je utiliser Chrome DevTools sur le téléphone d’un testeur ?
Pas avec le build installé depuis Google Play, car les builds release n’activent pas le débogage de la WebView. Demandez les étapes pour reproduire, installez vous-même la même version avec le débogage activé et inspectez-la avec chrome://inspect.
Pourquoi les testeurs voient-ils un écran blanc ?
Le plus souvent, le bundle contient encore un server.url hérité du live reload, ou une requête échoue en http:// simple. Vérifiez d’abord la configuration Capacitor et le panneau réseau d’un build debug.
Puis-je rester sur Capacitor 7 ?
Pas pour les nouveaux imports après l’échéance de l’API cible : chaque version majeure de Capacitor prend en charge une seule valeur de targetSdkVersion, Capacitor 7 utilise 35, alors que Google Play exige 36. Planifiez le passage à Capacitor 8 avec vos plug-ins avant le début du test.
Faut-il Android Studio pour compiler le bundle ?
Non. npx cap build android compile un .aab signé en ligne de commande avec vos options de keystore, ce qui se reproduit plus facilement en CI. Dans les deux cas, lancez d’abord le build web et npx cap sync android.
Sources
Les détails techniques ont été vérifiés dans la documentation officielle ci-dessous. Les menus et valeurs par défaut changent d’une version à l’autre ; en cas de doute, la page officielle fait foi.
- Capacitor: CLI build command
- Capacitor: Setting the target SDK
- Capacitor: Deploying to Google Play
- Android Developers: Sign your app
- Android Developers: Target API level requirements
- Capacitor: Configuration (android options, server options)
- Capacitor: Debugging (chrome://inspect)
- Play Policy: Device and Network Abuse
- Play Console Help: App testing requirements for new personal developer accounts
- Play Console Help: Set up an open, closed, or internal test
- Play Console Help: Deobfuscate or symbolicate crash stack traces
Vous découvrez la règle des 12 testeurs ?
Le guide général explique l’exigence de Google, le déroulement jour par jour d’une campagne TestBunny et ce que nous pouvons ou ne pouvons pas garantir.
Lire le guide général