Infos système
Inventaire read-only de la machine — OS, CPU, mémoire, disques, GPUs, batteries, réseau, processus, utilisateurs — par une seule API Kotlin.
Introspection style sysinfo : read-only, cross-plateforme, basé JNI. À utiliser pour la télémétrie, des fonctionnalités conditionnelles, des checks de prérequis ("on a besoin de 8 Go"), un écran de diagnostic intégré, ou simplement pour imprimer l'environnement dans les bug reports.
En bref
- Un point d'entrée :
object SystemInfo. - Couvre OS, CPU (par cœur + global), mémoire, disques, composants (sondes de température), réseaux, GPUs, batteries, processus, utilisateurs, carte-mère.
- Ponts natifs, pas de JNA, pas de scraping procfs depuis Kotlin.
- Vérifie toujours
isAvailable()avant d'en dépendre.
Installation
dependencies {
implementation("dev.nucleusframework:nucleus.system-info:<version>")
}Démarrage rapide
import dev.nucleusframework.systeminfo.SystemInfo
fun main() {
val os = SystemInfo.osInfo() ?: return
println("OS : ${os.longOsVersion} (${os.cpuArch})")
val mem = SystemInfo.memoryInfo()
println("Mémoire : ${mem?.usedMemory?.div(1024 * 1024)} Mo / ${mem?.totalMemory?.div(1024 * 1024)} Mo")
SystemInfo.gpus().forEach { gpu ->
println("GPU : ${gpu.name} — ${gpu.dedicatedVideoMemory / 1024 / 1024} Mo")
}
val battery = SystemInfo.batteryInfo()
println("Batterie : ${battery?.let { "${(it.stateOfCharge * 100).toInt()}% (${it.state})" } ?: "aucune"}")
}Fonctionnement
Chaque appel touche un pont natif — NativeMacOsSystemInfoBridge, NativeWindowsSystemInfoBridge, NativeLinuxSystemInfoBridge — qui enveloppe les APIs de la plateforme (IOKit, WMI / PDH, sysfs / procfs / udev). Les résultats sont nullables : un modèle de disque impossible à récupérer renvoie null plutôt qu'une valeur devinée.
L'API est snapshot : chaque méthode retourne l'état à l'instant T. Cache manuellement si l'on affiche en rafraîchissement.
Référence
OS
val os = SystemInfo.osInfo()
// name, longOsVersion, cpuArch, kernelVersion, hostname, …CPU
val cpu = SystemInfo.cpuInfo()
cpu?.cpus?.forEach { core ->
println("${core.brand}: ${core.frequency} MHz, usage ${core.cpuUsage}%")
}Mémoire et disques
SystemInfo.memoryInfo() // total, used, free, available, swap
SystemInfo.disks() // points de montage, tailles, systèmes de fichiersGPUs, batteries, réseau
SystemInfo.gpus()
SystemInfo.batteryInfo()
SystemInfo.networks()
SystemInfo.connectivityInfo()Processus et utilisateurs
SystemInfo.processes()
SystemInfo.process(pid)
SystemInfo.users()Temps d'inactivité
val idleSeconds = SystemInfo.idleTime()Cas d'usage
- Télémétrie — distribution anonymisée CPU / GPU / OS, sans SDK tiers.
- Fonctionnalités conditionnelles — réserve un modèle ML lourd à
memoryInfo()?.totalMemory > 8 Go. - Écran de diagnostic — laisse l'utilisateur exporter un rapport pour le support.
- UX consciente de l'énergie — mets en pause la sync de fond quand
batteryInfo().state == Discharging && stateOfCharge < 0.2.
Notes
- Certaines métriques sont spécifiques : capteurs de température rares sous Windows, modèle de carte-mère plus fiable sous Linux.
processes()peut coûter cher sur une machine chargée — privilégieprocess(pid)quand on n'en veux qu'un.
Couleur d'accent système
Lis la couleur d'accent OS choisie par l'utilisateur et le flag haut contraste — réactif, natif, prêt à brancher sur une color scheme Compose.
Barre de menus macOS
Construis la barre de menus macOS native de manière déclarative depuis Compose — SF Symbols, raccourcis clavier, badges, sous-menus, cases, boutons radio.