Flocon/FloconAndroid/sample-multiplatform
Florent CHAMPIGNY 5a16b94b6f
feat: [DASHBOARD] html (#443)
Co-authored-by: Florent Champigny <florent@bere.al>
2025-12-08 16:13:25 +01:00
..
src feat: [DASHBOARD] html (#443) 2025-12-08 16:13:25 +01:00
build.gradle.kts fix: [CLIENT] no op implem (#378) 2025-10-25 11:36:42 +02:00
proguard-rules.pro refact: [CORE] transform project into kotlin multiplatform (#370) 2025-10-22 13:02:35 +02:00
README.md refact: [CORE] transform project into kotlin multiplatform (#370) 2025-10-22 13:02:35 +02:00

App-Multi - Module Kotlin Multiplatform

Ce module est une version multiplateforme de app utilisant Kotlin Multiplatform avec Compose Multiplatform.

Plateformes supportées

  • Android - Application Android native
  • Desktop (JVM) - Application Desktop (macOS, Windows, Linux)
  • iOS - Support iOS (iosX64, iosArm64, iosSimulatorArm64)

Architecture

Structure des sources

app-multi/
├── src/
│   ├── commonMain/        # Code partagé entre toutes les plateformes
│   │   └── kotlin/
│   │       ├── ui/        # UI Compose Multiplatform
│   │       └── ...        # Logique métier partagée
│   ├── androidMain/       # Code spécifique Android
│   │   └── kotlin/
│   │       └── MainActivity.kt
│   ├── desktopMain/      # Code spécifique Desktop/JVM
│   │   └── kotlin/
│   │       └── Main.kt
│   └── iosMain/          # Code spécifique iOS

Technologies utilisées

  • Kotlin Multiplatform - Partage de code entre plateformes
  • Compose Multiplatform - UI déclarative multiplateforme
  • Ktor - Client HTTP (remplace OkHttp)
  • Room - Base de données locale (Android uniquement)
  • Flocon - Intercepteurs et outils de développement

Changements par rapport au module app

Ajouts:

  • Support Kotlin Multiplatform (Android, JVM, iOS)
  • Compose Multiplatform pour UI partagée
  • Ktor client avec support multiplateforme

Retraits:

  • GraphQL (Apollo)
  • gRPC
  • OkHttp (remplacé par Ktor)

Lancement des applications

Android

# Debug build
./gradlew :app-multi:assembleDebug

# Installer sur appareil/émulateur
./gradlew :app-multi:installDebug

# Lancer depuis IDE
# Ouvrir dans Android Studio et exécuter MainActivity

Desktop (JVM)

# Exécuter l'application Desktop (depuis le code source)
./gradlew :app-multi:run

# Ou utiliser la tâche spécifique Desktop
./gradlew :app-multi:desktopRun

# Exécuter depuis la distribution packagée
./gradlew :app-multi:runDistributable

# Créer la distribution pour la plateforme actuelle
./gradlew :app-multi:createDistributable

# Créer les packages natifs (DMG, MSI, DEB selon votre OS)
./gradlew :app-multi:packageDistributionForCurrentOS

Les distributions packagées seront dans app-multi/build/compose/binaries/main/:

  • .dmg pour macOS
  • .msi pour Windows
  • .deb pour Linux

iOS

# Compiler pour iOS
./gradlew :app-multi:iosX64MainKlibrary

# Pour exécuter, ouvrir dans Xcode ou utiliser Kotlin Multiplatform plugin

Structure de l'application

L'interface utilisateur est définie dans commonMain/ui/App.kt et est utilisée par:

  • Android: Via MainActivity.kt qui initialise le contexte Android
  • Desktop: Via Main.kt qui crée une fenêtre Compose Desktop
  • iOS: Via le bridge iOS (à configurer)

Client HTTP Ktor

Le client HTTP est initialisé différemment selon la plateforme:

  • Android: OkHttp engine
  • Desktop: CIO engine
  • iOS: CIO engine
// Exemple d'utilisation
DummyHttpKtorCaller.callGet()  // GET request
DummyHttpKtorCaller.callPost() // POST request

Développement

Ajouter du code partagé

Placer le code dans commonMain/kotlin/. Il sera disponible sur toutes les plateformes.

Ajouter du code spécifique à une plateforme

  • Android: androidMain/kotlin/
  • Desktop: desktopMain/kotlin/
  • iOS: iosMain/kotlin/

Expect/Actual

Pour les fonctionnalités spécifiques à une plateforme, utiliser le mécanisme expect/actual:

// commonMain
expect fun getPlatformName(): String

// androidMain
actual fun getPlatformName() = "Android"

// desktopMain  
actual fun getPlatformName() = "Desktop"

Notes

  • Room Database n'est disponible que sur Android
  • SharedPreferences n'est disponible que sur Android
  • L'UI Compose est 100% partagée entre Android et Desktop