最近在上手kotlin,之前开发都使用了DataBinding,最近在想kotlin中使用,果然遇到问题。记录问题,帮助更多踩坑的朋友。
首先需要在kotlin工程中引入启用DataBinding,如下:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled true
}
在app的build.gradle中开启DataBinding,与buildTypes是同一层级。
在使用java编写android的时候,只需要上述配置即可进行DataBinding的丝滑使用。但是在kotlin中的话,就会出现找不到DataBinding的问题,一般如下:
build failed 3s 590ms
Run build 3s 481ms
Load build 35ms
Configure build 464ms
Calculate task graph 9ms
Run tasks 2s 963ms
null
E:/CustomView
app/src/main/java
com/superlink/customview/MainActivity.kt
Unresolved reference: databinding
Unresolved reference: ActivityMainBinding
会提示 Unresolved reference的问题,这就是今天的坑。接下来就是解决办法,本人实测通过,如果有问题,那就有问题,反正我是编译通过并把程序跑起来了。
1.首先需要在app的build.gradle的dependencies中添加如下依赖:
kapt "com.android.databinding:compiler:3.1.2"
后面的版本是你的工程目录下的build tool的版本号,如下所示(项目的build.gradle)
classpath 'com.android.tools.build:gradle:3.1.2'
2.在与dependencies同层级下添加如下代码:
kapt {
generateStubs = true
}
到这里就离成功只差一步了,最后需要添加kapt的插件支持,否则是无法使用kapt这个指令的。在build.gradle的头部的问题添加如下代码,然后build工程,run起来,你会发现这个问题就这样简单的几句话就解决了。
apply plugin: 'kotlin-kapt'
经过以上步骤,可能有的朋友会遇到下面的这个问题
kotlin-stdlib-jre7 is deprecated. Please use kotlin-stdlib-jdk7 instead
解决上面的问题只需要将
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
修改成如下即可
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
即将jre7更换成jdk7即可。
完整配置如下:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled true
}
}
kapt {
generateStubs = true
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:27.1.1'
kapt "com.android.databinding:compiler:3.1.2"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
希望能帮到各位在爬坑的朋友们。
---------------------
作者:贺小梅0o
来源:CSDN
原文:https://blog.csdn.net/u012150124/article/details/80555665
版权声明:本文为博主原创文章,转载请附上博文链接!