2016-04-02 4 views
0

Also ich bin ziemlich psyed über die neuen Realm-Funktionen in 0.88 hinzugefügt und möchte sie in meinem Projekt verwenden. Leider ist es jetzt in 0.88+ notwendig, ein Gradle-Plugin mit dem Namen realm-android zu verwenden.Realm Gradle Plugin scheint Apt Code Generation für Dagger zu brechen

Ich benutze auch Dolch 1, die einen Code-Generation-Schritt erfordert (ich benutze Apt für diese). Als ich die Reich-Android-Plugin anwenden, stellen alle in Ordnung, aber ich bekomme die gefürchteten

Module adapter for class could not be loaded 

darauf hinweisen, dass der Compiler nicht richtig die Dateien erzeugt hat. Wenn ich das Realm-Plugin entferne, erzeugt dagger die Dateien korrekt. Wie kann ich Realm und Dagger dazu bringen, mit diesem neuen Plugin-Mechanismus gut zusammen zu spielen?

build.gradle (Projektebene): (für Relevanz bearbeitet)

buildscript { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.5.0' 
     classpath 'io.realm:realm-gradle-plugin:0.88.2' 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
    } 
} 

build.gradle (Modulebene): (für Relevanz bearbeitet)

apply plugin: 'com.android.application' 
apply plugin: 'realm-android' 
apply plugin: 'com.neenbedankt.android-apt' 

android { 
    compileSdkVersion 23 
    buildToolsVersion '23.0.2' 
    dexOptions { 
     jumboMode = true 
    } 

defaultConfig { 
    applicationId "xx.xx.xx" 
    minSdkVersion 15 
    targetSdkVersion 23 
    multiDexEnabled true 
} 

def daggerVersion = '1.2.2' 

dependencies { 
    apt "com.squareup.dagger:dagger-compiler:$daggerVersion" 
    compile "com.squareup.dagger:dagger:$daggerVersion" 
} 

bearbeiten 4/2/16

Ok Dinge werden komisch und ich frage mich, ob ich hier nicht einen Geist jage. Mir ist aufgefallen, dass es nicht nur das Hinzufügen des Plugins ist, sondern auch das Vorhandensein von mindestens zwei Realm-Modellen. Mit zwei Modellen X und Y läuft APT nicht für Dolch und ich erhalte denselben Fehler. Habe 0 oder 1 Modelle (X ODER Y) und es läuft ohne Fehler. Ich benutze die Modelle in keiner Weise und mache auch keinen Realm. Für ein konkretes Beispiel sind hier zwei Datenmodelle, die ich verwende, die dieses Verhalten zeigen.

import io.realm.RealmObject; 
import io.realm.annotations.PrimaryKey; 
import io.realm.annotations.Required; 

public class ContactEmail extends RealmObject { 
    @PrimaryKey 
    private String localGuid; 
    @Required 
    private String email; 

    public String getLocalGuid() { 
     return localGuid; 
    } 

    public void setLocalGuid(String localGuid) { 
     this.localGuid = localGuid; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 
} 


import io.realm.RealmObject; 
import io.realm.annotations.PrimaryKey; 
import io.realm.annotations.Required; 

public class ContactPhone extends RealmObject { 
    @PrimaryKey 
    private String localGuid; 
    @Required 
    private String phone; 

    public String getLocalGuid() { 
     return localGuid; 
    } 

    public void setLocalGuid(String localGuid) { 
     this.localGuid = localGuid; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 
} 
+0

Also, das ist eine extrem wilde Vermutung, aber was passiert, wenn Sie die Reihenfolge von 'Realm-Android' und' com.neenbedankt.android-apt' ändern? – EpicPandaForce

+0

Heh yeah habe versucht, alle möglichen Bestellungen dort :) Nein, gehen Sie traurig. Ich bin super abgeworfen von dieser "erlaubt ein Objekt" Sache! –

+0

Sie sollten ein minimales Beispiel machen und es als Problem für [realm-java] (https://github.com/realm/realm-java) veröffentlichen. – EpicPandaForce

Antwort

0

Es scheint, wie Realm ist die APT-Plugin von selbst anwenden (auf diesen line). Versuchen Sie also, die android-apt-Plugin-Zeile zu entfernen.

Das hat mich überrascht, als ich ein Android-Projekt evaluierte, das Butterknife 8 verwendete und nicht das android-apt-Plugin deklarierte, sondern nur das Realm-Plugin.

Verwandte Themen