Pages

Thursday, January 9, 2025

Notes sur la mise à jour d'un projet Android : Etape 1 Migration d'un projet vers jetpack-compose

 

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 
Vous pouvez consulter la documentation officielle : https://developer.android.com/develop/ui/compose/setup?hl=fr#groovy_1

  • Ajout de compose à true

Dans build.gradle (app) :
buildFeatures {
    dataBinding true
    viewBinding true
    compose true
}

  • Ajout dans le build


    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)

No comments:

Post a Comment

Publication android : échec de la demande d'accès en production

  Après avoir attendu 14 jours avec 12 testeurs, j'ai pu enfin  faire une demande d'accès en production .C'est long et on se dit...