Android開發:Kotlin下配置DataBinding

jarvanmo發表於2017-05-23

近日,隨著Google召開了Google I/O 2017,Kotlin大火一把。因為Google宣佈Kotlin為First-class開發語言作 為一名Kotlin忠實粉絲,高興地很呀。雖然短
時間內不太可能替代Java,但這次官宣意味承認了Kotlin在Android開發中的合法地位,讓想嘗試Kotlin卻有顧率的開發者可以放心地使用Kotlin(比如說我)。
有人說沒必要嘗試Ktolin,Kotlin沒有什麼吸引人的地方,相比java沒簡潔多少,只不是多一些語法糖而已。對我而言,我就是喜歡這些語法糖。當然了,此時也
應該回想回想Eclipse。Kotlin有諸如kotlin-android-extensions 以及Anko這種優秀的外掛或者庫,但是我也很偏愛Databinding。下面就講如何讓kotlin與databinding合諧並存

開發環境

AndroidStudio 2.3.2
Kotlin:1.1.2-3

安裝Kotlin外掛

開啟settings去plugin裡面搜尋kotlin,然後install就可以了。以在tools裡面我們就可以檢視kotlin了,在這裡可以進行檢查更新什麼的。
安裝完之後,可以雙擊shift然後彈出了一個對話方塊,在裡面輸入

 configure kotlin in project

然後可以選擇配置整個project還是單個Module。

gradle配置

經歷過以上步驟,你會發現你的Project下面的build.gradle變成這樣的了

buildscript {

    ext.kotlin_version = `1.1.2-3`
    repositories {
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:2.3.2"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

而module的build.gradle是這樣的

apply plugin: `com.android.application`
apply plugin: `kotlin-android`
android {
  ....
    dataBinding {
        enabled true
    }
}
dependencies {
    compile fileTree(include: [`*.jar`], dir: `libs`)
    androidTestCompile(`com.android.support.test.espresso:espresso-core:2.2.2`, {
        exclude group: `com.android.support`, module: `support-annotations`
    })

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:kotlin_version"
 
    testCompile `junit:junit:4.12`
}

正常來說,經過以上步驟我們就可以正常使用kotlin了,但是等等!!!今天的主角好像不是怎麼配置kotlin,我們的目的是讓kotlin與databinding共存。所以在你的Module的build.gradle還要加上一句:

apply plugin: `kotlin-kapt`
...
dependencies {
    compile fileTree(include: [`*.jar`], dir: `libs`)
    androidTestCompile(`com.android.support.test.espresso:espresso-core:2.2.2`, {
        exclude group: `com.android.support`, module: `support-annotations`
    })

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:kotlin_version"
    kapt `com.android.databinding:compiler:2.3.2`
    testCompile `junit:junit:4.12`
}

其中databinding complier的版本也就是2.3.2其實是和Project下的gradle版本是一樣的,當然了可以不一樣,如用2.3.1。
為了方便管理實際工作中我是這樣配置的

buildscript {

    ext.kotlin_version = `1.1.2-3`
    ext.gradle_version = `2.3.2`
    repositories {
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:$gradle_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
dependencies {
    compile fileTree(include: [`*.jar`], dir: `libs`)
    androidTestCompile(`com.android.support.test.espresso:espresso-core:2.2.2`, {
        exclude group: `com.android.support`, module: `support-annotations`
    })

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:kotlin_version"
    kapt "com.android.databinding:compiler:$rootProject.ext.gradle_version"
    testCompile `junit:junit:4.12`
}

AndroidStudio3.0

AndroidStudio3.0預設整合了kotlin,我們只需要configure一下就好了。但是3.0用的kotlin用的應該是1.1.2-4,這個版本和as3.0可能有衝突,可能會出一個circular dependencies的錯誤。這個時候你需要在```gradle.properties或者 local.properties加入:kotlin.incremental=false

如果依然不好用可能需要降低kotlin或者databinding compiler的版本了。


相關文章