Realm Android javassist.NotFoundException:io.realm.com_example_realmtest_data_SomethingRealmProxyInterface

Rus*_*lan 5 android realm kotlin

我是android领域的新手,我从简单的kotlin-project开始,只有一个实体,而这个实体只有一个字段。

open class Something : RealmObject() {
   @PrimaryKey 
   var id: Long = 0
}
Run Code Online (Sandbox Code Playgroud)

我在Application类中初始化了Realm:

class RealmApp : Application() {

    override fun onCreate() {
        super.onCreate()

        Realm.init(this)
        val config = RealmConfiguration.Builder().build()
        Realm.setDefaultConfiguration(config)
    }
}
Run Code Online (Sandbox Code Playgroud)

而且,当然,我添加了领域插件:

//Project level
dependencies {
    ...
    classpath "io.realm:realm-gradle-plugin:5.9.0"
}

//Module level
apply plugin: 'realm-android'
Run Code Online (Sandbox Code Playgroud)

一个简单的项目,但是每次我尝试编译它时,都会出现异常:

Caused by: javassist.NotFoundException: io.realm.com_example_realmtest_data_SomethingRealmProxyInterface
at javassist.ClassPool.get(ClassPool.java:452)
at io.realm.transformer.BytecodeModifier$Companion.addRealmProxyInterface(ByteCodeModifier.kt:96)
at io.realm.transformer.build.BuildTemplate.transformModelClasses(BuildTemplate.kt:109)
at io.realm.transformer.RealmTransformer.transform(RealmTransformer.kt:107)
at com.android.build.api.transform.Transform.transform(Transform.java:288)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
Run Code Online (Sandbox Code Playgroud)

我整天都在搜索以解决此问题,但没有找到任何东西。

Rus*_*lan 7

原来,我只需要apply plugin: 'kotlin-kapt'在模块级别build.gradle中。看起来Kotlin需要生成这些类。由于这个愚蠢的错误,我浪费了很多时间,所以我希望这个答案将对遇到类似错误的人们有所帮助。

编辑

正如评论中提到的musoof一样apply plugin: 'kotlin-kapt'事务的顺序。您必须先包含它apply plugin: 'realm-android'。否则,您仍然会收到相同的错误。

  • 值得一提的是 `apply plugin: 'kotlin-kapt'` 的顺序很重要。您必须在“应用插件:'realm-android'”之前包含它。否则你仍然会得到同样的错误 (2认同)