Saturday, July 23, 2022

[SOLVED] Realm not generating RealmProxy classes in Java/Kotlin project when using kapt

Issue

I'm trying to integrate realm in a Java/Kotlin project, but kapt is not generating RealmProxy classes even for .java files

I've updated realm because of href="https://github.com/realm/realm-java/issues/2491" rel="nofollow noreferrer">this, but still not working

Gradle app file:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-android'

repositories {
    maven {
        url 'https://maven.fabric.io/public'
    }
}

kapt {
    generateStubs = true
}

project.ext {
    daggerVersion = '2.2'
}

dependencies {

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    kapt "com.android.databinding:compiler:2.3.3"

    annotationProcessor group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
    compile group: 'com.google.dagger', name: 'dagger', version: "${daggerVersion}"
    kapt "com.google.dagger:dagger-compiler:${daggerVersion}"
    provided group: 'org.glassfish', name: 'javax.annotation', version: '10.0-b28'
    testAnnotationProcessor group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
    testCompile group: 'com.google.dagger', name: 'dagger', version: "${daggerVersion}"
    androidTestAnnotationProcessor group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
    androidTestCompile group: 'com.google.dagger', name: 'dagger', version: "${daggerVersion}"
}
...

Project File:

buildscript {
    ext.kotlin_version = '1.1.3-2'

    repositories {
        jcenter()

        maven {
            url 'https://maven.fabric.io/public'
        }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "io.realm:realm-gradle-plugin:3.5.0"
    }
}
...

Java Model file:

@RealmClass
public class NotificationEventsModel extends RealmObject {

    @PrimaryKey
    private long classPK;

    @SerializedName("userNotificationEventsCount")
    private int eventsCount;

}

Kotlin Model file:

@RealmClass open class PageModel(

    open var classPK: Long = 0,
    open var content: String? = null,
    @PrimaryKey
    open var id: Long = 0,

) : RealmObject() {

}

Solution

I solved the problem by declaring the realm-android plugin as the last one in the list of plugins and also by switching from annotationProcessor to Kapt, like below:

apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'realm-android'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-android'

kapt 'com.android.databinding:compiler:2.3.3'
compile group: 'com.google.dagger', name: 'dagger', version: "${daggerVersion}"
kapt group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
kaptTest group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
kaptAndroidTest group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"


Answered By - Silvio Gustavo
Answer Checked By - Marie Seifert (WPSolving Admin)