切换到插件Android Gradle 3.3时,构建项目io.realm.DefaultRealmModule时出错

时间:2019-02-07 10:39:42

标签: android kotlin realm

Android项目有两个使用Realm的模块。

组装时

buildscript {
     dependencies {
          classpath 'com.android.tools.build:gradle:3.2.0'
          classpath "io.realm:realm-gradle-plugin:5.7.0"
     }
}

没问题。

但是,在使用gradle:3.3.0进行构建时,出现错误“错误:程序类型已存在:io.realm.DefaultRealmModule”。

告诉我原因是什么以及如何消除它。

模块1

@RealmModule(classes = [
ResponseMetadata::class
 ])
class CourierModule

RealmConfiguration.Builder()
            .name("module1.realm")
            .schemaVersion(version)
            .modules(CourierModule())
            .deleteRealmIfMigrationNeeded()
            .build()

模块2

@RealmModule(classes = [
CookiesAuthInstaller::class
])
class InstallerModule

RealmConfiguration.Builder()
            .name("module2.realm")
            .schemaVersion(version)
            .modules(InstallerModule())
            .deleteRealmIfMigrationNeeded()
            .build()

1 个答案:

答案 0 :(得分:0)

当您说android模块时,我假设您将这些模块称为带插件的库

 apply plugin: 'com.android.library'

在这种情况下,您需要按如下所示修改自定义领域模块声明

    @RealmModule(library = true, classes = [CookiesAuthInstaller::class])
    class InstallerModule

    RealmConfiguration.Builder()
            .name("module2.realm")
            .schemaVersion(version)
            .modules(InstallerModule())
            .deleteRealmIfMigrationNeeded()
            .build()

然后是第二个模块:

   @RealmModule(library = true, classes = [ResponseMetadata::class])
   class CourierModule

   RealmConfiguration.Builder()
        .name("module1.realm")
        .schemaVersion(version)
        .modules(CourierModule())
        .deleteRealmIfMigrationNeeded()
        .build()

最后,不要忘记从IDE右窗格的gradle任务列表中运行clean和cleanBuildCache。 这样可以防止在构建期间创建DefaultRealmModule,但应用模块中使用的那个或使用Realm DB的库的最终用户除外。希望这可以帮助。