• 12 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 01/10/2024

Créez votre projet utilisant Jetpack Compose

Vous êtes probablement impatient ou impatiente de découvrir comment Jetpack Compose fonctionne. Cependant, avant de vous lancer dans un projet Android existant et de copier-coller machinalement du code utilisant Jetpack Compose, il est important de savoir qu'il faut d’abord importer plusieurs bibliothèques.

Créez un projet Android utilisant Jetpack Compose

Prenez connaissance des dépendances nécessaires à votre projet

En effet, Jetpack Compose se compose de plusieurs dépendances Gradle. On distingue par exemple :

  • compose.compiler ;

  • compose.runtime  ;

  • compose.ui  ;

  • compose.foundation  ;

  • compose.material oucompose.material3 ;

  • compose.animation.

Ces diverses dépendances évoluent selon des calendriers de versions distincts. Toutefois, pour éviter de spécifier chaque version de chaque dépendance, nous avons le BoM Compose à disposition.

Créez un nouveau projet

Si vous avez déjà créé un projet dans l’environnement de développement Android Studio, voici un simple rappel des étapes clés à suivre. Si vous n’avez pas encore créé de projet, je vous recommande de parcourir le chapitre Créez le projet et prenez en main l’environnement du cours "Développez votre première application Android". Voici un récapitulatif.

  1. Utilisez une version récente d’Android Studio.

  2. Cliquez sur File - New - New Project.

  3. Dans la catégoriePhone and Tablet, cliquez surEmpty Activity.

  4. Après avoir cliqué surNext, vous êtes invité à nommer votre projet. Dans le cadre du projet fil rouge, appelez-le “BestPodcast”.

  5. Vérifiez que votre projet utilise les dernières versions de Jetpack Compose. Pour savoir comment faire, vous pouvez valider chaque étape de la section suivante “Intégrez Jetpack Compose à un projet existant utilisant XML et Kotlin ou Java”.

Capture d'écran de la fenêtre New Project dans Android Studio. La fenêtre affiche divers modèles de projets sous la catégorie Phone and Tablet. Les modèles présents sont No Activity, Empty Activity, Basic Views Activity, ...

Intégrez Jetpack Compose à un projet existant utilisant XML et Kotlin ou Java

Mais si vous souhaitez intégrer Jetpack Compose à un projet existant utilisant XML et Kotlin, sachez que c’est possible et qu’Android supporte d’ailleurs très bien l’usage des deux technologies dans un même projet.

1. Pour cela, utilisez une version récente d’Android Studio.

2. Dans le fichierbuild.gradle.kts de votre module d’application, au sein du blocandroid {}, ajoutez la version de la dépendancecompose.compiler.

android{ 
    // Début du code à rajouter 
    composeOptions { 
        kotlinCompilerExtensionVersion = "1.5.14"
    } 
    // Fin du code à rajouter 
}

3. Restez dans le fichierbuild.gradle.ktsde votre module et activez la fonctionnalitécomposeau sein du blocbuildFeatures.

android{ 
    // Début du code à rajouter 
    buildFeatures { 
        compose = true // activer Compose
    } 
    // Fin du code à rajouter 
}

4. Dans le fichierbuild.gradle.ktsde votre module, au sein du blocdependencies {}, ajoutez les dépendances suivantes.

Si vous n’utilisez pas leGradle Build Catalog , suivez l’option 1. Si, au contraire vous souhaitez l’utiliser, passez directement à l’option 2.

Option 1

Option 2

dependencies { 
    // Début du code à rajouter 
   // BOM Compose
implementation(platform("androidx.compose:compose-bom:2024.06.00"))
// Material 3
implementation("androidx.compose.material3:material3")

// Facultatif : Icones Material Design supplémentaires
implementation("androidx.compose.material:material-icons-extended")

// Outillage
implementation("androidx.compose.ui:ui-tooling-preview")
debugImplementation("androidx.compose.ui:ui-tooling")

// Intégration avec les activités
implementation("androidx.activity:activity-compose:1.9.0")

// Facultatif : Intégration avec les viewModel
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.0")

// BOM Compose pour les test UI
androidTestImplementation(platform("androidx.compose:compose-bom:2024.06.00"))

// UI Tests
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
debugImplementation("androidx.compose.ui:ui-test-manifest")
    // Fin du code à rajouter 
}
dependencies { 
    // Début du code à rajouter 
   // BOM Compose
// compose BoM
implementation(platform(libs.androidx.compose.bom))

// Material 3
implementation(libs.androidx.material3)

// Facultatif : Icones Material Design supplémentaires
implementation(libs.androidx.material.icons)

// Outillage
implementation(libs.androidx.ui.tooling.preview)

// Intégration avec les activités
implementation(libs.androidx.activity.compose)

// Facultatif : Intégration avec les viewModel
implementation(libs.androidx.lifecycle.viewmodel.compose)

// BOM Compose pour les test UII
androidTestImplementation(platform(libs.androidx.compose.bom))
// UI Tests
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
    // Fin du code à rajouter 
}

5. Ensuite dans le fichierlibs.versions.toml , ajoutez les déclarations de dépendances et versions suivantes :

[versions]
# début du code à vérifier dans cette section
activityCompose = "1.9.0"
composeBom = "2024.06.00"
lifecyleViewModelCompose = "2.8.0"
# fin
[libraries]
# début du code à vérifier dans cette section
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-material-icons = { group = "androidx.compose.material", name = "material-icons-extended"}
androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle:", name = "lifecycle-viewmodel-compose", version.ref ="lifecyleViewModelCompose"}
# fin

6. Veillez à ce que la version de Kotlin de votre projet soit bien compatible avec la version du Compose Compiler. Par exemple, pour utiliser la version 1.5.14 du Compiler comme ci-dessus, il faut utiliser la version  1.9.24 de Kotlin. Dans le fichierbuild.gradle.ktsde votre projet (et non plus du module), vous devez avoir quelque chose comme ça pour les deux options.

Option 1

Option 2

plugins {
    id("com.android.application") 
    version "8.4.2" apply false
    id("org.jetbrains.kotlin.android") 
    version "1.9.24" apply false
}
plugins {
   alias(libs.plugins.android.application) 
   apply false
   alias(libs.plugins.jetbrains.kotlin.android) 
   apply false
}

Dans le fichier toml du module, ajoutez ce code :

[versions]
# début du code à vérifier dans cette section
agp = "8.4.2"
kotlin = "1.9.24"
# fin

[plugins]
# début du code à vérifier dans cette section
android-application = { id = "com.android.application", version.ref = "agp" }
jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
# fin

6. Synchronisez les dépendances du projet en cliquant sur le boutonSync nowqui apparaît en haut.

Capture d'écran de l'éditeur de code d'un IDE. L'onglet actif affiche le fichier build.gradle.kts (Module : app) avec plusieurs implémentations de bibliothèques et de dépendances pour un projet Android. Le bouton Sync Now se trouve en haut à gauche.
Synchronisez les dépendances de votre projet

7. Démarrez l’application afin de vérifier que tout fonctionne.

  • Pour la version 2024.06.00 de Jetpack Compose que nous avons spécifiée dans les dépendances, les versions decompileSdkVersionettargetSdkVersiondoivent être au moins égales à la version 34.  

android {
   /*...*/
   compileSdk = 34

   defaultConfig {
       targetSdk = 34
   }
   /*...*/
}
  • Les versions de Gradle et du plugin Android Gradle doivent être supérieures ou égales à 8.1.0 pour prendre en charge cette version de Jetpack Compose. Pour cela, vérifiez la version vers laquelle pointe l’urldistributionUrldéfinie dans le fichiergradle-wrapper.properties. Elle doit être au minimum comme ceci. 

distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-all.zip

Voici la vidéo qui vous montre les étapes principales pour créer un projet Android avecGradle Build Catalog (option 2) et comment intégrer Jetpack Compose au sein d’un projet existant, dont la configuration des dépendances est faite avec des fichiers .gradle(variante de l’option 1).

Observez la structure de l’activité principale

Maintenant que votre projet "BestPoscast" est créé, observons la structure de l’activité principale qui a été générée par défaut par Android Studio.

Voici à quoi ressemble cette activité :

class MainActivity : ComponentActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       enableEdgeToEdge()
       setContent {
           BestPodcastTheme {
               Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                   Greeting(
                       name = "Android",
                       modifier = Modifier.padding(innerPadding)
                   )
               }
           }
       }
   }
}

L’élément clé ici est le type de l’activité :ComponentActivity. Grâce à cette activité, nous allons pouvoir initier notre interface via la fonction setContent(). Cette fonction remplace la fonctionsetContentView()utilisée dans la boîte à outils d'interface utilisateur (UI toolkit) originale, qui lie le fichier XML représentant notre vue à notre activité. Voici ce que ça donne avec le UI toolkit traditionnel. 

class OldMainActivity : AppCompatActivity() { 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main_original) 
}

Avant de continuer, sachez que Jetpack Compose privilégie une architecture à activité unique et sans fragments car cela simplifie la gestion de l'état et de la navigation, améliore les performances et facilite les tests.

Cependant, Jetpack Compose offre également des API pour s'intégrer dans une application préexistante utilisant XML et Kotlin ou Java, avec plusieurs activités et fragments.

À vous de jouer !

Contexte

Vous savez maintenant comment initier un projet Jetpack Compose et à quoi ressemble une activité utilisant Jetpack Compose. Il est temps de mettre tout ça en pratique.

Consignes

  1. Créez un nouveau projet utilisant Jetpack Compose que vous appellerez par exemple “BestPodcast”.

  2. Validez que les versions des dépendances utilisées sont bien les dernières. En particulier la version du langage Kotlin, la dépendance au Compose Compiler et celle du BoM Compose.

  3. Lancez l’application créée par défaut sur votre téléphone Android ou sur un émulateur.

Livrables

Votre projet sur Android Studio doit être conforme aux consignes ci-dessus.

En résumé

  • Pour intégrer Jetpack Compose à votre projet, il est nécessaire d'ajouter plusieurs bibliothèques dans les dépendances. 

  • La version de Jetpack Compose implique des versions minimales de Kotlin, de Gradle et du SDK de Android.

  • En utilisant l'activitéComponentActivity, vous pouvez créer une activité exclusivement basée sur Jetpack Compose. 

  • La fonctionsetContentest utilisée pour établir la racine de l'écran.           

Maintenant que votre projet est prêt et que nous avons compris comment créer une activité permettant d’inclure du code Jetpack Compose, il est temps de découvrir votre premier composant et de comprendre les spécificités de Jetpack Compose.

Exemple de certificat de réussite
Exemple de certificat de réussite