Ошибка построения проекта io.realm.DefaultRealmModule при переходе на плагин Android Gradle 3.3 - PullRequest
0 голосов
/ 07 февраля 2019

В проекте 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 голосов
/ 27 июля 2019

Когда вы говорите, что модули 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()

И наконец, не забудьте запустить clean и cleanBuildCache из списка задач gradle на правой панели вашей IDE.Это предотвращает создание DefaultRealmModule во время сборки, за исключением того, который используется в модуле вашего приложения, или конечного пользователя вашей библиотеки, который использует Realm DB.надеюсь это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...