0.3.1-0-pre.4.fix.1

This commit is contained in:
2026-09-21 07:22:50 +02:00
parent a36b666d22
commit c806490212
10 changed files with 160 additions and 22 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: crates/apps/game-snake-poc-tauri/README.md -->
<!-- version: 6 -->
<!-- version: 7 -->
# game-snake-poc-tauri
@@ -16,7 +16,7 @@ L'organisation Rust suit le modèle des applications Desk KSP :
- `src/runtime.rs` possède le petit contrat runtime/provenance ;
- `frontend/` contient le host WebView et consomme les bindings générés de `game-snake-poc-wasm`.
À partir de `0.3.1-0-pre.3`, le frontend fournit aussi le Canvas, la boucle fixed-step, les contrôles clavier/touch et le chargement des assets canoniques. Le lifecycle mobile complet et la politique Back restent consolidés dans la tranche suivante.
À partir de `0.3.1-0-pre.3`, le frontend fournit aussi le Canvas, la boucle fixed-step, les contrôles clavier/touch et le chargement des assets canoniques. `0-pre.4` ajoute la suspension/reprise explicite, le suivi de visibilité et le resize/orientation.
## Statut du POC
@@ -38,6 +38,8 @@ Le host suspend explicitement sa boucle `requestAnimationFrame` lorsque la WebVi
Le POC reste mono-page et nenregistre volontairement aucun handler Tauri `onBackButtonPress`. La politique `EngineGame::quit_requested` de Snake est actuellement la politique moteur par défaut `Exit`, cohérente avec le Back Android/Tauri naturel. Un futur jeu retournant `Continue` devra introduire une intégration Back explicite au lieu de modifier ce POC silencieusement.
Le smoke ARM64 réel a cependant mis en évidence un abort natif pendant le teardown déclenché par Back sur le Galaxy S9+ de validation : `FORTIFY: pthread_mutex_lock called on a destroyed mutex`. Le crash arrive après le passage WebView en `visibility hidden` et avant le traitement `pagehide` du frontend. Le dépôt ne prétend donc pas corriger ce problème par un handler Back ad hoc ni par un patch du scaffold généré. Il est conservé comme limite du POC Tauri Android et doit être distingué du comportement d'un APK autonome lors de la beta.
## Limite ergonomique connue
Le D-pad tactile reste sous le Canvas dans ce POC et peut nécessiter un scroll sur petit écran. Des contrôles superposés ou des gestes swipe seraient techniquement possibles, mais ne sont pas introduits dans `0.3.1` : ils ne changent pas la conclusion darchitecture et appartiendraient à une UX produit réelle.

View File

@@ -1,5 +1,5 @@
<!-- file: crates/apps/game-snake-poc-tauri/USAGE.md -->
<!-- version: 6 -->
<!-- version: 7 -->
# Utilisation — Snake Tauri Android
@@ -22,7 +22,7 @@ export JAVA_HOME=/chemin/vers/jdk-17
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 ne sont pas requises pour `0-pre.2`.
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
@@ -61,6 +61,29 @@ Choisir l'appareil réel ou l'AVD voulu lorsque la CLI le demande. Le frontend d
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 :
```bash
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 :
```bash
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 quun besoin concret ne justifie pas la WebView Tauri.
@@ -77,3 +100,5 @@ Pendant `cargo tauri android dev` :
6. vérifier dans logcat les traces `runtime paused`, `runtime resumed` et les événements `visibility hidden/visible`.
Le D-pad placé sous le Canvas est une limite ergonomique connue du POC de référence et nest 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é.

View File

@@ -1,5 +1,5 @@
// file: crates/apps/game-snake-poc-tauri/vite.config.ts
// version: 2
// version: 3
import { fileURLToPath } from "node:url";
import { resolve } from "node:path";
@@ -71,15 +71,12 @@ export default defineConfig({
fs: {
allow: [appRoot, repositoryRoot, externalBuildRoot],
},
ws: devHost
? {
protocol: "ws",
host: devHost,
port: 1437,
}
: {
clientPort: 1436,
},
ws: {
protocol: "ws",
host: devHost || "127.0.0.1",
port: 1436,
clientPort: 1436,
},
watch: {
ignored: ["**/src/**"],
},