web-dev-qa-db-fra.com

Problème avec la liaison de données à l'aide de Kotlin pour Android

J'essaie d'activer la liaison de données pour mon Android utilisant Kotlin. J'ai le plug-in Kotlin activé, mais je ne suis pas en mesure d'activer la liaison de données Je reçois toujours l'erreur suivante

Error:(66, 0) Could not find method kapt() for arguments [com.Android.databinding:compiler:2.0.0-beta6] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler

J'ai les dépendances suivantes pour la liaison de données dans mon fichier gradle

dependencies {
 ...
 kapt 'com.Android.databinding:compiler:2.0.0-beta6'
} 

kapt {
    generateStubs = true
}
21
3xplore

Edit: Avec Kotlin 1.1 et Kapt3 cela fonctionne légèrement différent:

dans votre projetbuild.gradle:

buildscript {

   ext {
       ...
       plugin_version = "2.3.1"
       kotlin_version = "1.1.2-3"
       ...
   }

   ...

   dependencies {
       classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
       classpath "com.Android.tools.build:gradle:$plugin_version"
       ...
   }
}

et dans votre appbuild.gradle:

    apply plugin: "kotlin-Android"
    apply plugin: "kotlin-kapt"
    ...
    Android {
      ...
      dataBinding {
            enabled = true
        }
      ...
    }

    dependencies {
       ...
       kapt "com.Android.databinding:compiler:$plugin_version"
       ...
    }

Il est vraiment important que la version du compilateur de liaison de données et la version du plugin soient identiques.
Notez également qu'avec kapt3, vous ne devriez plus utiliser le drapeau generateStubs.


Ancienne réponse

Avoir le Android plugin Studio activé ne suffit pas, vous devez également ajuster un peu vos fichiers gradle (ajoutez et appliquez le kotlin-gradle-plugin) Voici des extraits de mes fichiers de notes avec le travail Java et Kotlin Databinding

Dans votre projetbuild.gradle:

buildscript {
...
 dependencies {
   classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.5"
   classpath 'com.Android.tools.build:gradle:2.2.3'
   ...
 }
}

et dans votre appbuild.gradle:

apply plugin: "kotlin-Android"
...
Android {
  ...
  dataBinding {
        enabled = true
    }
  ...
}
kapt {
    generateStubs = true
}
dependencies {
   ...
   kapt "com.Android.databinding:compiler:2.2.0"
   ...
}

(J'utilise ici une version plus récente du compilateur de liaison de données, vous devriez probablement le faire également)

37
Lovis

Essayez d'inclure les blocs manquants dans vos fichiers Gradle à l'aide de la source de fichier Gradle de référence suivante.

App niveau Build.Gradle

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

Android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.example.adventure.abc"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"

        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main.Java.srcDirs += 'src/main/kotlin/com/dougritter/marvelmovies'
    }
    dataBinding {
        enabled = true
    }
}




kapt {
    generateStubs = true
}

dependencies {
    //Compatibility
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.Android.support', module: 'support-annotations'
    })
    kapt 'com.Android.databinding:compiler:2.3.0'

    //Libraries
    testCompile 'junit:junit:4.12'
    compile 'com.Android.support:appcompat-v7:25.3.1'
    compile 'com.Android.support:design:25.3.1'
    compile 'com.Android.support:support-vector-drawable:25.3.1'
    compile 'com.Android.support:support-v4:25.3.1'
    compile project(':domain')
    compile project(':androidutils')
    compile 'com.Android.support.constraint:constraint-layout:1.0.2'
    compile 'com.jakewharton.timber:timber:4.5.1'


}

Projet level Build.Gradle

    // Top-level build file where you can add configuration options common to all sub-projects/modules.


buildscript {
    ext.kotlin_version = '1.1.2-2'
    repositories {
        maven { url 'https://maven.google.com' }
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:3.0.0-alpha1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-Android-extensions:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url 'https://maven.google.com' }
        mavenCentral()
    }
}


task clean(type: Delete) {
    delete rootProject.buildDir
}
2
erluxman