Compilateur de pièces Jetpack compose Breaks

11

J'ai créé un projet de composition Jetpack complètement nouveau (à partir du modèle de projet) avec Android Studio 4.0 Canary 6 et j'ai essayé d'ajouter des dépendances de pièce. Voici mon niveau d'application build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'


android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"

    defaultConfig {
        applicationId "com.example.composewithroom"
        minSdkVersion 29
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        compose true
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.1.0'
    implementation 'androidx.ui:ui-framework:0.1.0-dev03'
    implementation 'androidx.ui:ui-layout:0.1.0-dev03'
    implementation 'androidx.ui:ui-material:0.1.0-dev03'
    implementation 'androidx.ui:ui-tooling:0.1.0-dev03'


    implementation "androidx.room:room-runtime:2.2.2"
    implementation "androidx.room:room-ktx:2.2.2"
    kapt "androidx.room:room-compiler:2.2.2" // e: java.lang.NoSuchMethodError: org.jetbrains.kotlin.codegen.state.GenerationState$Builder.isIrBackend(Z)Lorg/jetbrains/kotlin/codegen/state/GenerationState$Builder;

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

J'obtiens cette erreur lorsque j'essaye de le construire:

e: java.lang.NoSuchMethodError: org.jetbrains.kotlin.codegen.state.GenerationState$Builder.isIrBackend(Z)Lorg/jetbrains/kotlin/codegen/state/GenerationState$Builder;

Cela peut être soit "corrigé" en supprimant kapt "androidx.room:room-compiler:2.2.2"ou en désactivant la compositioncompose true

Quelqu'un a-t-il une idée de comment résoudre ce problème ou la base de données des salles est-elle simplement inutilisable avec Compose pour le moment?

Sémantique
la source
1
AFAIK, c'est juste inutilisable pour le moment. Il existe un conflit entre une partie de la magie spéciale de Kotlin sur laquelle Compose s'appuie et certains processeurs d'annotation, tels que Room.
CommonsWare
Exactement - j'ai essayé compose = trueavec kapt "androidx.databinding"et j'ai eu la même erreur. C'est probablement juste que la composition est incompatible avec kapt.
Overmind Jiang

Réponses:

6

Doit être corrigé dans la version 1.3.61 ... mais le plugin du compilateur Jetpack Compose n'est pas mis à jour.

Vous pouvez trouver plus d'informations dans le problème YouTrack suivant: IR (Jetpack Compose), KAPT, Room: "AssertionError: le backend IR ne doit pas appeler KotlinTypeMapper.mapType: MainActivity" . Le dernier commentaire indique que:

Le problème ici est que JetPack Compose n'a pas encore mis à jour son compilateur Kotlin interne en 1.3.61. Nous verrons ce que nous pouvons y faire.

En outre, le problème suivant dans Google Issue Tracker: les processeurs d'annotation échouent lorsque la composition est activée

Xavier Rubio Jansana
la source