Aller au contenu

Guides de configuration · Ionic / Capacitor

Test fermé Google Play pour les applications Ionic et Capacitor

Votre application web tourne dans un projet Android natif : la release se compile donc comme n’importe quelle application Android. Ce guide couvre les parties propres à Capacitor (build web, npx cap sync android, signature dans Android Studio et SDK cible), puis le maintien de 12 testeurs inscrits pendant 14 jours.

Build
npx cap sync android
Code de version
android/app/build.gradle → versionCode
API cible
variables.gradle → targetSdkVersion = 36

Compiler un app bundle signé

  1. 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 comme webDir dans la configuration Capacitor soit à jour.

  2. Synchroniser vers Android

    npx cap sync android copie le build web dans le projet natif et met à jour les plugins natifs. Sans cette étape, vous publiez le JavaScript de la veille.

  3. Ouvrir Android Studio

    Lancez npx cap open android.

  4. 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.

Terminal
npm run build
npx cap sync android
npx cap open android

Vous 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é :

Terminal
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/app/build.gradle
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.

android/variables.gradle
ext {
    // ...
    targetSdkVersion = 36
}

Pièges Ionic et Capacitor

  • Live reload oublié. Un server.url dans 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 android d’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 .so doivent 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.

  1. Reproduisez sur un build debug

    Lancez l’application sur un téléphone depuis Android Studio, ouvrez chrome://inspect dans 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://inspect fonctionne de la même façon dans Edge.

  2. N’inspectez un build release qu’en local

    Si un bug n’apparaît qu’en release, passez temporairement webContentsDebuggingEnabled à true dans 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.

  3. 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 .aab les rend lisibles.

capacitor.config.ts (local debug build only)
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 .aab et 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.

Ouvrir les étapes Play Console

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é :

Terminal
npm run build
npx cap sync android
npx cap open android

La 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.minWebViewVersion vaut 60 par défaut et ne peut pas descendre sous 55. Les testeurs en difficulté doivent d’abord mettre à jour Android System WebView depuis Google Play.
  • Pas de contenu mixte. android.allowMixedContent est désactivé par défaut et n’est pas prévu pour la production. Servez chaque API et chaque ressource en HTTPS, et laissez server.cleartext à sa valeur par défaut false.
  • Synchronisez avant chaque build. Chaque correctif nécessite npx cap sync android aprè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.

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

Besoin de 12 vrais testeurs pendant 14 jours ?

Ajoutez votre application et votre lien de test fermé, choisissez Starter (15 testeurs) ou Pro (25 testeurs), puis suivez l’activité de chaque testeur jour par jour dans votre panneau.

TestBunny n’est pas affilié à Google. Les testeurs gagnent des crédits, jamais d’argent. Personne ne peut garantir la décision de Google sur l’accès en production, et nous ne le faisons pas.