6.4 KiB
Utilisation — Snake Tauri Android
Prérequis locaux
Le host utilise Cargo/Rust, cargo tauri, Node/npm, wasm-bindgen, Java et le SDK Android. Le dépôt attend ANDROID_HOME vers le SDK Android et des NDK side-by-side sous $ANDROID_HOME/ndk/<version>.
NDK_HOME n'est pas un prérequis utilisateur du projet. Tauri sélectionne la version NDK side-by-side appropriée sous $ANDROID_HOME/ndk/<version> et peut injecter lui-même NDK_HOME dans ses sous-processus Android. Une variable globale ne doit donc pas être ajoutée uniquement pour satisfaire la documentation générique de Tauri.
Pour 0.3.1, le JDK Android de référence est JDK 17. Le template Tauri 2.11.x utilisé par le projet génère Gradle 8.14.3 avec Android Gradle Plugin 8.11.0 : AGP 8.11 exige au minimum JDK 17 et Gradle 8.14.x ne peut pas s'exécuter sur Java 25. JDK 17 fournit donc la baseline reproductible commune aux deux contraintes.
Le Java 25 global de la machine de validation peut rester installé. En revanche, le JBR de l'Android Studio actuellement installé est lui aussi Java 25 et ne doit donc pas être utilisé pour cette gate malgré la recommandation générique de Tauri d'utiliser le JBR d'Android Studio. Le Gradle global installé sur la machine n'est pas utilisé par gen/android/gradlew et n'est pas un prérequis du projet.
Avant une commande Tauri Android, sélectionner explicitement un JDK 17 installé et vérifier la version :
export JAVA_HOME=/chemin/vers/jdk-17
"$JAVA_HOME/bin/java" -version
Ne pas modifier gen/android pour contourner une incompatibilité de JDK.
Pour les cibles actuellement disponibles, aarch64-linux-android permet le smoke sur l'appareil ARM64 et x86_64-linux-android celui des AVD x86_64. Les autres ABI restent disponibles pour les validations multi-ABI ultérieures mais ne sont pas nécessaires au smoke courant.
Initialisation locale
Installer les dépendances frontend dans la crate :
(cd crates/apps/game-snake-poc-tauri && npm install)
Initialiser une fois le projet Android généré par Tauri :
(cd crates/apps/game-snake-poc-tauri && cargo tauri android init)
Le répertoire gen/ produit par Tauri est généré et ignoré ; il n'appartient pas aux deltas et ne doit pas être patché par des scripts propres au jeu.
Si ce répertoire a été créé ou modifié par 0-pre.2.fix.1, il est pollué par la tentative abandonnée de migration Gradle 9. Il faut alors le régénérer intégralement avec la CLI Tauri officielle, sous JDK 17 :
rm -rf crates/apps/game-snake-poc-tauri/gen/android
(cd crates/apps/game-snake-poc-tauri && cargo tauri android init)
L'audit de distribution vérifie désormais un gen/android présent et refuse un wrapper/AGP qui ne correspondent pas au template Tauri 2.11.x attendu.
Smoke Android de développement
Lancer ensuite :
(cd crates/apps/game-snake-poc-tauri && cargo tauri android dev)
Choisir l'appareil réel ou l'AVD voulu lorsque la CLI le demande. Le frontend doit afficher le Canvas Snake, les compteurs score/longueur, les contrôles directionnels et les assets snake / engine-v1. La provenance doit évoluer depuis android / tauri-webview / wasm / <device> / unknown vers un profil d'entrée observé (touch, keyboard-mouse ou mixed) après utilisation des contrôles. Les événements de démarrage doivent apparaître dans le tracing/logcat.
Ne pas utiliser npm run dev ou npm run build comme gate manuelle : ces scripts sont des hooks internes possédés par Tauri. cargo tauri android build reste réservé au jalon de packaging prévu par le plan, sauf diagnostic explicite.
Appareil Android réel via USB
Sur un appareil physique, Tauri remplace automatiquement le host localhost du devUrl par une adresse réseau. Pour la gate de référence, le chemin reproductible retenu évite le LAN et utilise le tunnel USB ADB sur le même port HTTP/WebSocket Vite :
adb -s <serial> reverse --remove-all
adb -s <serial> reverse tcp:1436 tcp:1436
adb -s <serial> reverse --list
(cd crates/apps/game-snake-poc-tauri && cargo tauri android dev --host 127.0.0.1)
Le serial vient de adb devices -l et ne doit jamais être enregistré dans les sources. La configuration Vite utilise le port 1436 pour HTTP et WebSocket afin que le même tunnel transporte aussi le HMR. Un port HMR séparé n'appartient pas au contrat de ce POC.
Pour vérifier l'ABI réelle avant le smoke :
adb -s <serial> shell getprop ro.product.cpu.abi
adb -s <serial> shell getprop ro.product.cpu.abilist
arm64-v8a correspond à la cible Rust aarch64-linux-android, tandis que les AVD utilisés jusqu'ici sont x86_64-linux-android.
Positionnement
game-snake-poc-tauri est un POC de référence. Il ne doit pas être utilisé comme base automatique des futurs jeux Android ; la cible Android productive reste SDL3 natif tant qu’un besoin concret ne justifie pas la WebView Tauri.
Smoke lifecycle 0-pre.4
Pendant cargo tauri android dev :
- lancer une partie et effectuer au moins une entrée tactile ;
- mettre l’application en arrière-plan puis la ramener au premier plan ;
- vérifier que le serpent reprend sans accélération ni rattrapage de la durée passée en background ;
- faire pivoter/redimensionner l’émulateur si disponible et vérifier que le Canvas reste rendu ;
- utiliser Back Android : pour Snake, l’application doit suivre le comportement système de sortie, sans navigation Web interne ni interception spécifique ;
- vérifier dans logcat les traces
runtime paused,runtime resumedet les événementsvisibility hidden/visible.
Le D-pad placé sous le Canvas est une limite ergonomique connue du POC de référence et n’est pas un critère bloquant de cette gate.
Sur le Galaxy S9+ ARM64 utilisé pour la validation réelle, le chargement, WASM, Canvas, assets et touch ont fonctionné via le tunnel USB. En revanche, le Back système a provoqué pendant le teardown de l'Activity/WebView un abort natif FORTIFY: pthread_mutex_lock called on a destroyed mutex, après visibility hidden et avant pagehide. Ce comportement est enregistré comme limite de la pile Tauri/Wry/WebView observée et non contourné par une modification de gen/android. Il doit être retesté sur l'APK autonome de la beta afin de distinguer le mode dev d'un package embarqué.