Так что я в восторге от новых функций Realm, добавленных в 0.88, и хочу использовать их в своем проекте. К сожалению, в версии 0.88+ теперь необходимо использовать плагин Gradle под названием realm-android.
Я также использую Dagger 1, для которого требуется этап генерации кода (для этого я использую apt). Когда я применяю плагин realm-android, все компилируется нормально, но я получаю ужасное
Module adapter for class could not be loaded
указывает на то, что компилятор неправильно сгенерировал файлы. Если я удалю плагин области, кинжал правильно сгенерирует файлы. Как я могу заставить Realm и Dagger хорошо работать вместе с этим новым механизмом плагинов?
build.gradle (уровень проекта): (отредактировано для актуальности)
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 (уровень модуля): (отредактировано для актуальности)
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"
}
Изменить 02.04.16
Хорошо, все становится странным, и мне интересно, не преследую ли я здесь призрака. Я заметил, что дело не только в добавлении плагина, но и в наличии как минимум двух моделей областей. Имея две модели X и Y, APT не работает для Dagger, и я получаю ту же ошибку. Имейте 0 или 1 модель (X ИЛИ Y), и она работает без ошибок. Я никоим образом не использую модели и даже не создаю экземпляр Realm. В качестве конкретного примера, вот две модели данных, которые я использую, которые демонстрируют такое поведение.
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;
}
}
realm-android
иcom.neenbedankt.android-apt
? - person EpicPandaForce   schedule 04.04.2016