Skip to Content
React Native13. Play Store ⭐13.2 Préparer la release

Chapitre 13.2 — Préparer la release : AAB, signing, submit

Où on en est : le compte existe. Côté technique, TOUT est déjà en place (P12) — ce chapitre ne fait que brancher le pipeline sur la Console : l’AAB du profil production, Play App Signing, et l’upload automatisé.

⏱️ TL;DReas build --profile production sort l’AAB (channel production pour les OTA). Play App Signing (obligatoire) : GOOGLE détient la clé de signature finale ; votre keystore devient la « upload key » (perdable et remplaçable — le drame du keystore perdu appartient au passé). eas submit uploade l’AAB dans la Console sans clic. La première release passe par la piste interne (vous, tout de suite) avant le test fermé.

🎯 Objectifs

  • Produire l’AAB de production (et re-situer chaque réglage déjà connu).
  • Comprendre Play App Signing : upload key vs app signing key.
  • Automatiser l’envoi avec eas submit (service account, une fois).
  • Créer la première release sur la piste interne et l’auto-tester.

L’AAB de production

Le profil existe depuis le ch. 11.2 — relecture annotée :

"production": { "autoIncrement": true, // versionCode géré (ch. 12.6) "channel": "production", // les OTA du store (ch. 12.5) "env": { "APP_VARIANT": "production" } // identité com.alex.drill }
eas build --profile production --platform android # buildType par défaut = AAB (app-bundle)

Rien de neuf : mêmes prebuild, gradle, signature — seul le format de sortie change (bundleRelease au lieu d’assembleRelease). L’AAB ne s’installe pas (ch. 12.2) : son seul destin est la Console.

Play App Signing — qui signe quoi

Depuis 2021, le Play Store impose son modèle à deux clés :

  • L’app signing key (celle qui compte pour les utilisateurs) est générée et détenue par Google — vous ne la voyez jamais.
  • Votre keystore (celui d’EAS, ch. 12.2) devient l’upload key : il authentifie VOS uploads. Perdu ? Contrairement au passé : un formulaire de reset auprès de Google et une nouvelle upload key — l’app survit. (La paranoïa keystore du ch. 12.3 reste valable pour… la voie perso, où VOTRE clé est la seule.)
  • Conséquence pratique : l’APK que télécharge un utilisateur du Store n’a PAS la même signature que votre APK sideloadé → on ne met pas à jour l’un par l’autre. Les deux voies (P12/P13) sont des lignées parallèles — même package name, mais un téléphone suit l’une OU l’autre.

L’activation est automatique à la première release (opt-in par défaut) — Configuration → Intégrité de l’app pour le vérifier.

eas submit — l’upload sans clics

eas submit --platform android --latest # envoie le dernier build EAS vers la Console

Le setup une-fois : un service account Google Cloud (la doc EAS guide pas à pas : créer la clé JSON dans la Console Google Cloud, la lier dans la Play Console, la déclarer dans eas.json) :

"submit": { "production": { "android": { "serviceAccountKeyPath": "./secrets/play-service-account.json", "track": "internal" // ← la piste cible (internal → closed → production) } } }

(⚠️ le JSON du service account = un secret : .gitignore + gestionnaire de mots de passe — c’est une clé d’API qui peut publier votre app.)

Subtilité de la PREMIÈRE fois : le tout premier AAB d’une app doit être uploadé manuellement dans la Console (créer la release de piste interne à la main) — eas submit prend le relais ensuite. Et le premier upload FIGE le package name (le dernier irréversible de la liste).

La piste interne — votre bac à sable de Console

Tests → Tests internes → créer la release (l’AAB uploadé), ajouter votre email de testeur → lien d’opt-in → le Play Store vous propose Drill en quelques minutes (pas de review sur cette piste). C’est la répétition générale : l’app telle que le Store la livre (APK dérivé, signé Google), sur votre téléphone, via le vrai canal.

Le rituel d’auto-test s’enrichit d’un point store : vérifier que la version Store se met bien à jour PAR le Store (pousser un second AAB, la mise à jour apparaît) — et que vos OTA (channel production) l’atteignent.

⚠️ Piège — Le téléphone qui a l’APK sideloadé (P12) ne peut PAS installer la version Store par-dessus (signatures différentes — voir plus haut). Pour tester la piste interne : désinstaller la version perso d’abord (adieu l’historique local de CE téléphone — on l’accepte, ou on teste sur l’émulateur/un second appareil). Anticipez ce moment : le jour où une app perso « passe au Store », ses premiers utilisateurs (vous, la famille) doivent migrer manuellement.

💡 Pour un dev Next.js — eas submit + les pistes = votre pipeline preview/production Vercel, mais avec un intermédiaire souverain au milieu. Play App Signing en est le symbole : sur le web, VOUS êtes l’autorité de ce que reçoivent les navigateurs ; sur le Store, l’autorité finale est Google — vous ne faites que proposer.

✏️ Exercices

1. Construisez le vrai AAB de production de Drill (local ou cloud) et inspectez-le : taille vs l’APK preview, et contenu (un AAB est un zip — regardez dedans).

✅ Solution

eas build --profile production --platform android --local → un .aab. Renommer en .zip et ouvrir : base/ (dex, res, assets — dont le bundle Hermes), la structure modulaire qui permet au Store de générer des APK par appareil. Taille : l’AAB est souvent PLUS GROS que l’APK (il contient toutes les variantes) — c’est le téléchargement utilisateur qui est plus petit (~-30 %). L’inspection démystifie : c’est votre app, emballée autrement.

2. Documentez la lignée de signatures de Drill : qui signe quoi sur les trois canaux (dev build, APK perso, Store), et quelles mises à jour croisées sont possibles.

✅ Solution

Dev build : debug key (ou EAS) — lignée dev. APK perso : keystore EAS (upload key) — lignée perso. Store : app signing key Google — lignée store. Mises à jour possibles UNIQUEMENT au sein d’une lignée. dev→perso : non (et package .dev différent de toute façon — ch. 11.3). perso→store et retour : non, désinstallation obligatoire. Ce tableau dans le README évite le moment de panique « INSTALL_FAILED » devant témoin.

3. Écrivez la checklist « première release interne » de A à Z (elle servira pour chaque nouvelle app) — de l’AAB au Drill installé via le Store.

✅ Solution

(1) Questionnaires de Console remplis (sinon release bloquée). (2) AAB production buildé. (3) Premier upload MANUEL → release de test interne. (4) S’ajouter comme testeur + lien d’opt-in. (5) Installer depuis le Play Store (badge « interne »). (6) Rituel complet (partie, notif, deep link, offline). (7) eas update --channel production -m "baseline" → vérifier l’OTA sur la version Store. (8) Configurer eas submit (service account) pour la suite. L’étape 7 est celle qu’on oublie : les OTA du Store se testent AVANT le public.

🧠 Quiz

1. Upload key vs app signing key ?

Réponse

L’upload key (votre keystore EAS) authentifie vos envois ; l’app signing key (détenue par Google) signe ce que reçoivent les utilisateurs. L’upload key perdue se remplace — le drame historique du keystore est résolu… côté Store.

2. Pourquoi l’APK Store et l’APK perso sont-ils incompatibles ?

Réponse

Signatures différentes (Google vs votre keystore) : Android refuse la mise à jour croisée — deux lignées parallèles, migration = désinstallation.

3. Que faut-il configurer pour eas submit ?

Réponse

Un service account Google Cloud (clé JSON liée à la Play Console, déclarée dans eas.json, traitée comme un secret) — et le premier AAB reste un upload manuel.

4. Que permet la piste interne ?

Réponse

Tester l’app via le vrai canal Store (APK dérivé signé Google) en quelques minutes, sans review — le bac à sable avant le test fermé.

5. Quel est le dernier « irréversible » déclenché dans ce chapitre ?

Réponse

Le premier upload d’AAB fige le package name de l’app sur le Store — com.alex.drill, pour toujours.


👉 Chapitre suivant : 13.3 — La fiche du store — la vitrine : assets, textes, et les questionnaires qui bloquent tout.