Тип программы уже присутствует мультидекс ошибки - PullRequest
0 голосов
/ 27 июня 2019

У нас есть следующие настройки:

Приложение> Framework A> Framework B Приложение использует A и B. Framework A использует только B.

Фреймворки создаются отдельно и обслуживаются через частный репозиторий maven.

Сейчас мы провели много рефакторинга в Framework B, включая переход с gson на moshi.

При сборке приложения мы получаем следующую ошибку:

AGPBI: {"kind":"error","text":"Program type already present: moe.banana.jsonapi2.JsonApiConverterFactory$MoshiResponseBodyConverter","sources":[{}],"tool":"D8"}

> Task :app:transformDexArchiveWithDexMergerForApi18DevelopmentDebug FAILED
java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: ...
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.

Зависимости фреймворка B довольно "скучные":


dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    implementation 'com.squareup.moshi:moshi:1.8.0'
    implementation 'com.squareup.retrofit2:retrofit:2.6.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.14.2'
    implementation "com.squareup.retrofit2:converter-moshi:2.6.0"

    implementation 'moe.banana:moshi-jsonapi:3.5.0'
    implementation 'moe.banana:moshi-jsonapi-retrofit-converter:3.5.0'

    // optional, for retrofit
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1"
}

Для Framework A это:

dependencies {
    // Kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
    implementation "org.jetbrains.anko:anko-coroutines:$anko_version"
    implementation "androidx.core:core-ktx:$ktx_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"

    implementation 'androidx.annotation:annotation:1.1.0'

    implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
    implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
    implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"

    implementation 'com.squareup.wire:wire-runtime:2.2.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation "com.google.android.gms:play-services-location:$play_services_version"
    implementation "FrameworkB"
}

Как только мы теперь включим фреймворк A в приложение, произойдет указанное исключение.

Вещи, которые мы уже пробовали

  • $ ./gradlew app:dependencies -> Существует только ОДНА запись в библиотеке jsonapi2. Все выглядит правильно.
  • Попытка сборки с отключенным мультидексом: та же ошибка
  • Включите обе платформы в качестве исходных модулей в приложение: все работает без изменения зависимостей.

После нескольких дней попыток решить эту ошибку, мы пришли к точке, в которой мы понятия не имеем, как ее отследить.

Есть ли другой способ узнать, откуда Gradle думает, что этот дубликат класса / зависимости появился?

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