Comment ai-je été lancée ?
Détecte au runtime si l'app tourne en DMG, MSIX, Flatpak, AppImage, ./gradlew run, etc.
Le même code Kotlin peut être livré en DMG, MSIX, Flatpak, Snap, AppImage, installeur .exe, ou simplement ./gradlew run dans le IDE. Chacune de ces formes change des règles dures — où on peut écrire, quel canal d'update utiliser, à quoi ressemble le chemin d'install. ExecutableRuntime permet de brancher sur ça sans deviner.
TL;DR
ExecutableRuntime.type(): ExecutableTyperenvoie le format de packaging. Le plugin Nucleus pose la system propertynucleus.executable.typeau packaging.- Helpers :
isAppX(),isFlatpak(),isDmg(),isAppImage(),isJar()(alias dev mode), etc. - Sert à gater l'auto-update, les chemins fichiers, les stratégies store vs direct, le code sandbox-aware.
Installation
Fourni avec core-runtime. Le module aot-runtime réexporte les mêmes types si l'on ne veux que la détection AOT.
Quickstart
import dev.nucleusframework.core.runtime.ExecutableRuntime
import dev.nucleusframework.core.runtime.ExecutableType
when (ExecutableRuntime.type()) {
ExecutableType.AppX -> showMicrosoftStoreUpdate()
ExecutableType.Snap -> showSnapStoreUpdate()
ExecutableType.Flatpak -> showFlathubUpdate()
ExecutableType.Pkg -> showMacAppStoreUpdate()
else -> NucleusUpdater { /* ... */ }.checkForUpdates()
}
if (ExecutableRuntime.isAppX()) {
// Sandboxé : écris dans le state du package, pas dans HOME
}Comment ça marche
Le plugin Gradle écrit -Dnucleus.executable.type=<kind> dans le .cfg du launcher au packaging. La même property est baked-in pour les builds native-image. ExecutableRuntime.type() ne fait que la lire — donc c'est exactement aussi fiable que le pipeline de packaging (et complètement découplé d'heuristiques fichier type "est-ce que /snap/ est dans mon path").
En ./gradlew run, aucune property n'est posée, donc le runtime renvoie Jar — sers-t'en comme signal dev mode. Conséquence : les features qui ont besoin d'une détection fiable (comme AutoLaunch.wasStartedAtLogin()) court-circuitent en dev pour éviter les faux positifs.
Référence
ExecutableRuntime
| Méthode | Renvoie | Notes |
|---|---|---|
type() | ExecutableType | Lit nucleus.executable.type. |
isAppX(), isFlatpak(), isSnap(), isAppImage(), isDmg(), isPkg(), isExe(), isMsi(), isDeb(), isRpm(), isJar() | Boolean | Un par variante. |
ExecutableType
Jar, AppImage, Dmg, Pkg, Exe, Msi, AppX, Deb, Rpm, Flatpak, Snap et compagnie.
Notes
- La variante
Jarcouvre./gradlew runet tout exécutable non packagé — pratique comme signal dev. - Pour la version, utilise
NucleusApp.version—ExecutableRuntimene connaît que la forme. - Le mode AOT (training vs runtime) vit dans un module voisin —
AotRuntime.mode().