Android 使用Kotlin 和 DataBinding 遇到 not access class问题

尝试把部分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 中文翻译这里绝大部分都翻译了。

你可能感兴趣的:(android开发)