Конфликт зависимости Android от jar, встроенного в aar - PullRequest
0 голосов
/ 26 октября 2018

Я использую проект библиотеки Android, импортируя aar в качестве модуля приложения. Приложение прекрасно компилируется в режиме отладки, но когда я пытаюсь скомпилировать в выпуске, я получаю следующую ошибку:

Error: Program type already present: com.google.gson.DefaultDateTypeAdapter

Итак, я покопался в своих зависимостях для gson и обнаружил, что в файле aar есть несколько встроенных jar-файлов, и он, кажется, конфликтует с моими внешними зависимостями, в частности Retrofit, OkHttp и Gson

enter image description here

Я пытался исключить группу com.google.code.gson при импорте модуля aar, но безуспешно, он ничего не меняет:

implementation(project(':ONprintWS')) {
    exclude group: 'com.google.code.gson'
}

Я также подумал, что мог бы, возможно, удалить модифицированные зависимости в моем build.gradle, видя, как они включены из aar, но когда я делаю мои классы, я больше не могу найти пакеты retrofit / gson.

Я попросил сопровождающего SDK перестроить SDK без встроенного jar (вместо этого с использованием транзитивных зависимостей), но это может не произойти какое-то время, есть ли способ удалить встроенные jar?

ИЗМЕНЕНО, чтобы показать исключение gradle, все еще не работает

//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation "com.google.code.gson:gson:2.8.5"
implementation("com.squareup.retrofit2:converter-gson:2.4.0") {
    exclude group: "com.google.code.gson"
}
implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'

// ONprintWS SDK
implementation 'io.realm:realm-gradle-plugin:5.3.0'
implementation(project(':ONprintWS')) { // v1.0.4
    exclude group: "com.squareup.retrofit2"
    exclude group: "com.squareup.okhttp3"
    exclude group: "com.google.code.gson"
}

1 Ответ

0 голосов
/ 26 октября 2018

Одна вещь, которую вы можете попробовать вместо exclude, это предоставить resolutionStrategy для данной зависимости, например:

configurations.all { 
    resolutionStrategy { 
       force "com.android.support:support-v13:$SUPPORT_LIBRARY_VERSION" 
    } 
}

в разделе dependencies. Это обеспечит назначение определенной версии для данного пакета

...