我创建了:
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'
导致此错误的原因是什么?我应该如何解决?谢谢!
答案 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的依赖关系后,问题才解决。