Publication sur Google Play Store

Android exige que toutes les applications soient signées numériquement avec un certificat avant de pouvoir être installées. Afin de distribuer votre application Android via le Google Play store, elle doit être signée avec une clé de version qui doit ensuite être utilisée pour toutes les futures mises à jour. Depuis 2017, il est possible pour Google Play de gérer automatiquement la signature des releases grâce à la fonctionnalité App Signing by Google Play. Cependant, avant que le binaire de votre application ne soit téléchargé sur Google Play, il doit être signé avec une clé de téléchargement. La page Signer vos applications de la documentation Android Developers décrit le sujet en détail. Ce guide couvre le processus en bref, ainsi que la liste des étapes nécessaires pour empaqueter le bundle JavaScript.

Générer une clé de téléchargement#

Vous pouvez générer une clé de signature privée en utilisant keytool. Sous Windows, keytool doit être exécuté depuis C:\Program Files\Java\jdkx.x.x_x\bin.

keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Copy

Cette commande vous demande des mots de passe pour le keystore et la clé et pour les champs Distinguished Name de votre clé. Elle génère ensuite le keystore sous la forme d’un fichier appelé my-upload-key.keystore.

Le keystore contient une seule clé, valable pendant 10000 jours. L’alias est un nom que vous utiliserez plus tard lors de la signature de votre application, pensez donc à prendre note de l’alias.

Sur Mac, si vous n’êtes pas sûr de l’emplacement de votre dossier JDK bin, alors exécutez la commande suivante pour le trouver :

/usr/libexec/java_home

Copy

Il en sortira le répertoire du JDK, qui ressemblera à quelque chose comme ceci:

/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contenu/Home

Copier

Naviguer vers ce répertoire en utilisant la commande cd /your/jdk/path et utiliser la commande keytool avec la permission sudo comme indiqué ci-dessous.

sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Copy

Note : N’oubliez pas de garder le fichier keystore privé. Dans le cas où vous avez perdu la clé de téléchargement ou qu’elle a été compromise, vous devez suivre ces instructions.

Configuration des variables Gradle#

  1. Placez le fichier my-upload-key.keystore sous le répertoire android/app de votre dossier de projet.
  2. Modifiez le fichier ~/.gradle/gradle.properties ou android/gradle.properties, et ajoutez ce qui suit (remplacez ***** par le mot de passe correct du keystore, l’alias et le mot de passe de la clé),

MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Copy

Ces-ci vont être des variables Gradle globales, que nous pourrons utiliser plus tard dans notre config Gradle pour signer notre app.

Note sur la sécurité : Si vous n’êtes pas chaud pour stocker vos mots de passe en clair, et que vous utilisez macOS, vous pouvez également stocker vos informations d’identification dans l’app Keychain Access. Ensuite, vous pouvez sauter les deux dernières lignes dans ~/.gradle/gradle.properties.

Ajout de la configuration de signature à la configuration Gradle de votre app#

La dernière étape de configuration qui doit être effectuée est de configurer les builds de version pour qu’ils soient signés en utilisant la clé de téléchargement. Editez le fichier android/app/build.gradle dans le dossier de votre projet, et ajoutez la configuration de signature,

android {
defaultConfig { … }
signingConfigs {
release {
if (project.hasProperty(‘MYAPP_UPLOAD_STORE_FILE’)) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
….

Copie

Génération de la version AAB#

Exécutez ce qui suit dans un terminal:

cd android
./gradlew bundleRelease

Copier

La bundleReleaseGradle regroupera tout le JavaScript nécessaire pour exécuter votre application dans l’AAB (Android App Bundle). Si vous devez changer la façon dont le bundle JavaScript et/ou les ressources dessinables sont regroupés (par exemple, si vous avez changé les noms de fichiers/dossiers par défaut ou la structure générale du projet), jetez un coup d’œil à android/app/build.gradle pour voir comment vous pouvez le mettre à jour pour refléter ces changements.

Note : Assurez-vous que gradle.properties n’inclut pas org.gradle.configureondemand=true, car cela fera en sorte que la release build saute le regroupement de JS et des actifs dans le binaire de l’app.

L’AAB généré peut être trouvé sous android/app/build/outputs/bundle/release/app.aab, et est prêt à être téléchargé sur Google Play.

Pour que Google Play accepte le format AAB, l’App Signing by Google Play doit être configuré pour votre application sur la console Google Play. Si vous mettez à jour une application existante qui n’utilise pas App Signing by Google Play, veuillez consulter notre section sur la migration pour savoir comment effectuer ce changement de configuration.

Tester la build de version de votre application#

Avant de télécharger la build de version sur le Play Store, assurez-vous de la tester minutieusement. Désinstallez d’abord toute version précédente de l’app que vous avez déjà installée. Installez-la sur le périphérique en utilisant la commande suivante dans la racine du projet :

npx react-native run-android –variant=release

Copy

Notez que --variant release n’est disponible que si vous avez configuré la signature comme décrit ci-dessus.

Vous pouvez mettre fin à toute instance de bundler en cours d’exécution, puisque tout votre framework et votre code JavaScript sont regroupés dans les actifs de l’APK.

Publication vers d’autres magasins#

Par défaut, l’APK généré possède le code natif pour les architectures de CPU x86 et ARMv7a. Cela permet de partager plus facilement des APK qui fonctionnent sur presque tous les appareils Android. Cependant, cela a l’inconvénient qu’il y aura un peu de code natif inutilisé sur n’importe quel appareil, ce qui conduit à des APK inutilement plus gros.

Vous pouvez créer un APK pour chaque CPU en modifiant la ligne suivante dans android/app/build.gradle:

– ndk {
– abiFilters « armeabi-v7a », « x86 »
– }.
– def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true

Copy

Téléchargez ces deux fichiers sur les marchés qui prennent en charge le ciblage des appareils, comme Google Play et Amazon AppStore, et les utilisateurs obtiendront automatiquement l’APK approprié. Si vous voulez télécharger sur d’autres marchés, tels que APKFiles, qui ne prennent pas en charge plusieurs APK pour une seule application, modifiez également la ligne suivante pour créer l’APK universel par défaut avec des binaires pour les deux CPU.

– universalApk false // Si vrai, génère également un APK universel
+ universalApk true // Si vrai, génère également un APK universel

Copy

Activer Proguard pour réduire la taille de l’APK (facultatif)#

Proguard est un outil qui peut réduire légèrement la taille de l’APK. Il le fait en dépouillant les parties du bytecode Java React Native (et ses dépendances) que votre application n’utilise pas.

IMPORTANT : Assurez-vous de tester minutieusement votre application si vous avez activé Proguard. Proguard nécessite souvent une configuration spécifique à chaque bibliothèque native que vous utilisez. Voir app/proguard-rules.pro.

Pour activer Proguard, modifiez android/app/build.gradle:

/**
* Exécutez Proguard pour réduire le bytecode Java dans les builds de version.
*/
def enableProguardInReleaseBuilds = true

Copy

Migration d’anciennes applications Android React Native pour utiliser App Signing by Google Play#

Si vous migrez depuis une version précédente de React Native, il y a des chances que votre application n’utilise pas la fonctionnalité App Signing by Google Play. Nous vous recommandons de l’activer afin de profiter de choses comme le fractionnement automatique des apps. Afin de migrer de l’ancienne façon de signer, vous devez commencer par générer une nouvelle clé de téléchargement et ensuite remplacer la configuration de signature de la version android/app/build.gradle pour utiliser la clé de téléchargement au lieu de celle de la version (voir la section sur l’ajout de la configuration de signature à gradle). Une fois que c’est fait, vous devez suivre les instructions du site d’aide de Google Play afin d’envoyer votre clé de version originale à Google Play.

Permissions par défaut#

Par défaut, la permission INTERNET est ajoutée à votre application Android car à peu près toutes les applications l’utilisent. La permission SYSTEM_ALERT_WINDOW est ajoutée à votre APK Android en mode débogage mais elle sera supprimée en production.