Files
games/docs/development/007-ANDROID_JNI_BRIDGE.md
2026-09-16 09:39:53 +02:00

1.5 KiB

Bridge Java/JNI Android

Objectif

Le bridge Java/JNI sert uniquement aux services réellement Android qui ne sont pas déjà fournis de manière portable par SDL3.

L'input tactile de base ne passe pas par JNI : SDL3 fournit directement les événements de doigt et le moteur les convertit en PointerState.

Contrat V1

La baseline expose un unique appel Java vers Rust :

NativeBridge.nativeContractVersion() -> 1

SaseGameActivity vérifie ce contrat après SDLActivity.onCreate().

Cette vérification détecte au démarrage :

  • bibliothèque Rust non chargée ;
  • symbole JNI absent ;
  • divergence de version de bridge.

Extension future

Les futurs services pourront ajouter des opérations dédiées pour :

  • haptique Android ;
  • partage natif ;
  • facturation ;
  • publicité ;
  • notifications ;
  • autres services dépendants du framework Android.

Ils ne doivent pas servir à réimplémenter les entrées, fenêtres ou événements déjà couverts par SDL3.

Sécurité Rust

L'export JNI utilise un symbole nommé explicitement et reçoit deux pointeurs opaques JNI qui ne sont pas déréférencés.

Aucun bloc unsafe ni fonction unsafe n'est autorisé.

Si un futur service nécessite de manipuler réellement JNIEnv, il devra faire l'objet d'une tranche distincte avec une politique FFI réévaluée plutôt que d'élargir implicitement l'exception actuelle.