尝试把部分Java代码改成Kotlin实现然后遇到一些问题。
环境配置
build.gradle(Project)
buildscript {
ext.kotlin_version = '1.0.2'//kotlin版本号 设置到ext下应该就是全局的了,之后再module下也可以用
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'
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
}
}
build.gradle(module app/library)
apply plugin: 'kotlin-android'//写在apply plugin:'com.android.application'旁边就好
apply plugin: 'kotlin-android-extensions'//具体有没有效果不太清楚,如果不加报错就加上这句
dependencies{
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
之后还有这个操作,看起来是把kotlin下面的目录等价java的,然后编译之后就报noclassdef的错误,所以这里我就把kt文件也放在java目录下。反正也是java工程改写好像也没什么问题
sourceSets{
main.java.srcDirs += 'src/main/kotlin'
}
然后我使用了DataBinding 所以只有这个设置是不行的
dataBinding{
enabled = true
}
要在依赖添加DataBinding的kapt,关于最后的版本号到DataBinding 的jcenter查询最新的release版本(之前看网上的版本都很老,而且会报错,请保证版本是最新)
dependencies{
kapt 'com.android.databinding:compiler:2.1.3'
}
如果用的2.1以上的Android studio 默认是开启kotlin插件的,As的版本还是请保持最新
报错问题
之后将一个模块修改成kotlin之后,build没有报错。运行安装就报了no access class的错误
在这里看到类似的解决方法(这是其中一个回答)
But this issue doesn't break builds. It's just issue of IDE. You can suppress it with @Suppress("MISSING_DEPENDENCY_CLASS") or use variable syntax access (but only for setters):
binding.model = Model() replace with binding.setVariable(BR.model, Model())
所以我将setVariable的方法上添加 @Suppress(‘MISSING_DEPENDENCY_CLASS’)现在可以正常安装运行(@Suppress 是kotlin包下的注解)
kotlin lang 和kotlin lang 中文翻译这里绝大部分都翻译了。