Migration vers Jetpack compose
Cet article n'est pas vraiment un article.Il s'agit plus d'une prise de notes.
Tout d'abord, pour migrer vers jetpack compose, j'ai créé une branche Git, c'est plus sûr et je peux facilement revenir en arrière si besoin.
Ajout de la configuration
Il faut tout d'abord mettre en place la configuration Compose
Dans build.gradle (app) :
buildFeatures {
dataBinding true
viewBinding true
compose true
}
def composeBom = platform('androidx.compose:compose-bom:2024.10.01')
implementation composeBom
androidTestImplementation composeBom
// Choose one of the following:
// Material Design 3
implementation 'androidx.compose.material3:material3'
// or Material Design 2
implementation 'androidx.compose.material:material'
// or skip Material Design and build directly on top of foundational components
implementation 'androidx.compose.foundation:foundation'
// or only import the main APIs for the underlying toolkit systems,
// such as input and measurement/layout
implementation 'androidx.compose.ui:ui'
// Android Studio Preview support
implementation 'androidx.compose.ui:ui-tooling-preview'
debugImplementation 'androidx.compose.ui:ui-tooling'
// UI Tests
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
debugImplementation 'androidx.compose.ui:ui-test-manifest'
// Optional - Included automatically by material, only add when you need
// the icons but not the material library (e.g. when using Material3 or a
// custom design system based on Foundation)
implementation 'androidx.compose.material:material-icons-core'
// Optional - Add full set of material icons
implementation 'androidx.compose.material:material-icons-extended'
// Optional - Add window size utils
implementation 'androidx.compose.material3.adaptive:adaptive'
// Optional - Integration with activities
implementation 'androidx.activity:activity-compose:1.9.2'
// Optional - Integration with ViewModels
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5'
// Optional - Integration with LiveData
implementation 'androidx.compose.runtime:runtime-livedata'
// Optional - Integration with RxJava
implementation 'androidx.compose.runtime:runtime-rxjava2'
Ajout de Compose Compiler Gradle Plugin
J'ai relancé un clean puis un build, et j'ai eu lors d'une de ces deux étapes le message suivant :
Starting in Kotlin 2.0, the Compose Compiler Gradle plugin is required
when compose is enabled. See the following link for more information:
https://d.android.com/r/studio-ui/compose-compiler
Add Compose Compiler Gradle plugin
Affected Modules: app
Au delà la version 2.0, on est censé installer le plugin Compose Compiler Gradle
J'ai donc cliqué sur Add puis do refactor
Mise à jour de KSP
J'ai refait un clean et j'ai eu le message ci-dessous :
ksp-2.0.0-RC2-1.0.20 is too old for kotlin-2.0.0. Please upgrade ksp or downgrade kotlin-gradle-plugin to 2.0.0-RC2.
J'ai donc mis à jour KSP à la version 2.0.21-1.0.27
build.gradle ( project)
plugins {
id 'com.android.application' version '8.7.3' apply false
id 'com.android.library' version '8.7.3' apply false
id 'org.jetbrains.kotlin.android' version '1.8.20-RC' apply false
id 'com.google.devtools.ksp' version '2.1.0-1.0.29' apply false
id 'org.jetbrains.kotlin.plugin.compose' version '2.0.0' apply false
}
Je refais le clean et le message a disparu
Remarque :
Si je choisi ksp-2.1.0-1.0.29, j'ai le message :
ksp-2.1.0-1.0.29 is too new for kotlin-2.0.0. Please upgrade kotlin-gradle-plugin to 2.1.0.
Autre message pendant les build
Voici un des messages que j'ai eu lors d'un build :
Unable to find method ''org.jetbrains.kotlin.buildtools.api.SourcesChanges org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.getChangedFiles$default(org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile, org.gradle.work.InputChanges, java.util.List, kotlin.jvm.functions.Function1, int, java.lang.Object)''
'org.jetbrains.kotlin.buildtools.api.SourcesChanges org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.getChangedFiles$default(org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile, org.gradle.work.InputChanges, java.util.List, kotlin.jvm.functions.Function1, int, java.lang.Object)'
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.
In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.
J'ai cliqué sur le message Re-download dependencies et cela a fonctionné
Finalement, j'ai utilisé la configuration suivante
:
buildscript {
ext {
kotlin_version = '2.0.21'
}
J'ai cliqué sur le message Re-download dependencies et cela a fonctionné
J'ai fait un rebuild et j'ai exécuté le projet et maintenant tout fonctionne.
Remarque : Au début, j'avais mis la version 2.1 de Kotlin mais j'ai eu des warnings dans le build : Warning dans le build.gradle (app) Kotlin version that is used for building with Gradle (2.1.0) is not properly supported in the IDE plugin (2.0)