领域 - 错误:未捕获的翻译错误:java.lang.IllegalArgumentException:已添加:Lio / realm / DefaultRealmModule;

时间:2017-05-16 12:22:43

标签: android realm

我创建了:

1)使用Realm的Library-A

apply plugin: 'com.android.library'
apply plugin: 'realm-android'

和2)使用Realm和library-A的Project-A; Project-A不使用Library-A的架构。

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

主要项目的gradle:

dependencies {
    classpath "io.realm:realm-gradle-plugin:3.1.3"
}

在构建过程中,我遇到了这些错误:

Error:Uncaught translation error: java.lang.IllegalArgumentException: already added: Lio/realm/DefaultRealmModule;
Error:Uncaught translation error: java.lang.IllegalArgumentException: already added: Lio/realm/DefaultRealmModuleMediator;
Error:2 errors; aborting
Error:Execution failed for task ':x:transformClassesWithDexForDevDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Return code 1 for dex process

更新:我的构建设置似乎有问题,进一步检查只是将插件添加到库中导致错误。

apply plugin: 'realm-android'

导致此错误的原因是什么?我应该如何解决?谢谢!

2 个答案:

答案 0 :(得分:1)

将模型分成模块。

库中的某处声明

// You can make this a singleton, annotations are the important part.
@RealmModule(library = true, allClasses = true)
class LibraryRealmModule {}

这会将该库中的所有模型类放入LibraryRealmModule

您可以在应用项目中执行相同的操作,但如果您没有指定任何模块,则会为您生成默认模块。此生成的模块将包含应用程序项目中的所有模型类。

然后,当您构建Realm实例时,请提供以下配置:

final LibraryRealmModule libRealmModule = new LibraryRealmModule();
final RealmConfiguration config = RealmConfiguration.Builder()
        .name(Realm.DEFAULT_REALM_NAME) // Just a file name
        .modules(Realm.getDefaultModule(), libRealmModule) // List all modules
        .deleteRealmIfMigrationNeeded() // TODO Actually migrate data when in production!
        .build()
final Realm realm = Realm.getInstance(config);

除了你的插件配置是正确的。

答案 1 :(得分:0)

关于我在这个问题中提出的项目结构,Eugen的答案没有直接解决我遇到的问题,但是他必须创建一个RealmModule是正确的。

创建了另一个库Library-B(RealModule),它包含了Library-A的RealmObjects和Project-A。将其设置为2的依赖关系后,问题才解决。