12. Déploiement
En développement, [Android Studio] (ou [gradlew installDebug]) installe la version « debug » de l'application : signée avec une clé de débogage créée automatiquement, et qui permet le débogueur. Pour la livrer, on construit la version « release ».
12.1. La version de production de l'application
- Construire l'application, en lui donnant l'adresse du serveur de production. Dans une fenêtre de commandes ouverte sur le dossier [rdvmedecins_kotlin] :
[Gradle] compile le code [Kotlin] en « bytecode », puis en code [Dalvik] (le format des fichiers [.dex], exécutés par la machine virtuelle d'[Android], [ART]), et emballe le tout, avec les ressources et les bibliothèques, dans un fichier APK : le format d'installation des applications [Android]. Contrairement à [Flutter], il n'y a pas de moteur à embarquer : l'interface est dessinée par [Compose], une bibliothèque comme une autre. Le fichier produit, [app/build/outputs/apk/release/app-release-unsigned.apk], pèse quelques mégaoctets.
Le bloc [buildTypes { release [ ... ] }] de [app/build.gradle.kts] règle cette version. On peut y activer l'optimiseur [R8] ([optimization [ enable = true ]]) : il retire le code inutilisé des bibliothèques et raccourcit les noms, ce qui divise la taille de l'APK. Il faut alors lui dire de garder ce que la sérialisation trouve par réflexion (les règles de [kotlinx.serialization] sont fournies avec la bibliothèque) et TESTER la version optimisée.
-
La signer. [Android] n'installe que des applications SIGNÉES. Le plus simple est de passer par [Android Studio] : le menu [Build / Generate Signed App Bundle or APK] crée la clé du développeur (un fichier « keystore », protégé par un mot de passe, à conserver précieusement : toutes les mises à jour de l'application devront être signées avec elle), puis construit et signe l'APK. On peut aussi décrire la signature dans [app/build.gradle.kts] (bloc [signingConfigs]), en lisant les mots de passe dans des propriétés de [Gradle] plutôt que de les écrire dans le code.
-
L'installer. Le téléphone étant relié à l'ordinateur (câble USB, débogage USB activé) :
On peut aussi copier le fichier APK sur le téléphone et l'ouvrir : [Android] demande alors d'autoriser l'installation d'applications « de sources inconnues ».
-
Pour une vraie publication :
-
le [Google Play Store] attend un « Android App Bundle » plutôt qu'un APK : [gradlew bundleRelease], ou le même menu d'[Android Studio]. C'est Google qui en tire les APK adaptés à chaque téléphone ;
- le nom et l'icône de l'application se règlent dans [res/values/strings.xml] ([app_name]) et [res/mipmap-*/] (menu [New / Image Asset] d'[Android Studio]) ;
- [versionCode] (un entier) doit augmenter à chaque publication ; [versionName] est la version affichée ;
- le serveur doit être en HTTPS (les mots de passe circulent), et la ligne [android:usesCleartextTraffic="true"] disparaît du manifeste ;
- le jeton est gardé dans les [SharedPreferences], un fichier privé de l'application. Pour plus de sécurité, on peut le chiffrer avec le « keystore » d'[Android] (bibliothèque [androidx.security]).
12.2. Le serveur en production
En production réelle, on n'oubliera pas le fichier [.env] du serveur :
- un [JWT_SECRET] long et aléatoire ;
- [CAPTCHA_TEST] vide ;
- [COOKIE_SECURE=true] si le site est servi en HTTPS (il doit l'être). Le client mobile renvoie le cookie quelle que soit cette option : c'est le navigateur qui la respecte ;
- [TRUST_PROXY=true] si le serveur est placé derrière un proxy ([nginx]...), pour que la limitation des tentatives voie l'adresse IP réelle des clients.
On lance alors le serveur compilé : [npm run build], puis [npm run start:prod].