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

本文介绍了在将Android项目中的Java代码迁移到Kotlin时,遇到的not access class错误。作者提供了环境配置和Gradle设置的详细步骤,包括启用DataBinding并确保Kotlin插件更新至最新版本。当遇到运行时的access class错误,通过在setVariable方法上添加@Suppress('MISSING_DEPENDENCY_CLASS')注解,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值