You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

App与聊天库引入Picasso依赖致编译错误的解决方案咨询

解决多模块依赖重复冲突问题

这个问题我之前帮不少开发者踩过坑——本质就是依赖重复冲突:你的App模块和Chat Library模块都单独引入了Picasso,而Picasso内部依赖的Apache HttpClient相关类被两个模块重复打包,导致D8编译时抛出Program type already present: org.apache.http.auth.AuthSchemeFactory错误。下面给你几个实用的解决办法:

方案一:统一版本管理(推荐)

在根项目的build.gradle中定义统一的依赖版本,让两个子模块共用同一版本的Picasso,从根源上避免版本不一致导致的冲突:

// 根项目build.gradle
buildscript {
    ext {
        // 定义统一的Picasso版本号,替换成你实际需要的版本
        picassoVersion = "2.71828"
    }
    // 其他原有配置...
}

然后在App模块和Chat Library模块的build.gradle中,引用这个统一版本:

// App模块/Chat Library模块的build.gradle
dependencies {
    implementation "com.squareup.picasso:picasso:${picassoVersion}"
}

方案二:排除重复的依赖项

如果统一版本后仍有冲突,可以手动排除Picasso携带的重复Apache HttpClient依赖。比如在Chat Library模块中排除相关依赖(因为App模块通常会依赖Library,在Library中排除更合理):

// Chat Library模块的build.gradle
dependencies {
    implementation("com.squareup.picasso:picasso:2.71828") {
        // 排除重复的Apache HttpClient依赖组
        exclude group: 'org.apache.httpcomponents', module: 'httpclient'
    }
}

方案三:利用依赖传递简化配置

如果Chat Library是被App模块依赖的子模块,可以在Chat Library中用api关键字引入Picasso,这样App模块无需再单独引入,整个项目只会保留一份依赖:

// Chat Library模块的build.gradle
dependencies {
    // 使用api替代implementation,让依赖传递到App模块
    api "com.squareup.picasso:picasso:2.71828"
}

之后App模块的build.gradle中就不需要再添加Picasso的依赖了,直接使用即可。

额外排查技巧

可以通过执行以下命令查看App模块的依赖树,精准定位重复依赖的来源:

./gradlew app:dependencies

在输出结果中搜索org.apache.http.auth.AuthSchemeFactory,就能看到是哪个模块引入了重复的类。

内容的提问来源于stack exchange,提问作者Iman Marashi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:48:02