Android依赖与嵌入在aar中的jar冲突

标签 android gradle gradle-dependencies

我通过将 aar 作为应用程序模块导入来使用 Android 库项目。该应用程序在 Debug模式下编译良好,但是当我尝试在发布版本中编译时,出现以下错误:

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

所以我在我的 gson 依赖项中挖掘了一下,发现 aar 文件中包含了一堆嵌入的 jar 文件,而且它似乎与我的外部依赖项冲突,特别是 Retrofit、OkHttp 和 Gson

enter image description here

我在导入 aar 模块时尝试排除组 com.google.code.gson 但没有运气,它不会改变任何东西:
implementation(project(':ONprintWS')) {
    exclude group: 'com.google.code.gson'
}

我还认为我可以删除 build.gradle 中的改造依赖项,看看它们是如何从 aar 中包含的,但是当我这样做时,我的类(class)再也找不到改造/gson 包了。

我已经要求 SDK 维护人员在没有嵌入式 jar 的情况下重建 SDK(使用传递依赖项),但它可能暂时不会发生,是否有删除嵌入式 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"
}

最佳答案

您可以尝试一件事,而不是使用 exclude是提供一个resolutionStrategy对于给定的依赖项,例如:

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

dependencies部分。这将确保为给定包指定特定版本

关于Android依赖与嵌入在aar中的jar冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53011076/

相关文章:

java - Gradle 多项目传递依赖

java - Gradle 自依赖解析

android - 如何使用 gradle 构建 Android 树

android - 当通过 Android Studio 生成新的 .apk 时,从输出文件夹中删除旧的 .apk

gradle - SLF4J : multiple SLF4J bindings with Gradle Plugin

java - SomeClass.<OtherClass>someMethod() 语法含义

android - 当进行 retrofit2 请求时,单元测试 Call 对象为 null

Android支持multidex库实现

android - 对于 Android 应用程序,哪个是最好的 firebase 或 php 和 json with mysql?