【Gradle】Android Studio中Gradle重复依赖的问题(转载请删除括号里的内容)
问题
项目中有个Module需要解析json所以选用了依赖Gson,但是编译时报错如下:
Error:Execution failed for task ':app:transformClassesWithJarMergingForAutoioDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/gson/annotations/Expose.class
分析
看到错误中的这个duplicate,第一反应和平常一样,难道是得先清理一下Clean project ? 反复试了几次都不行,上网查才发现是重复依赖Gson库的问题,导致项目中有了两个重复的Expose.class
类。
使用快捷键(Shift + Ctrl + T)查看项目中的Expose.class
类,发现是和passport-1.4.2.jar这个本地jar包冲突了,它也依赖了gson库所以导致了重复依赖。
项目结构
在往下面分析之前,需要先根据项目结构说明一下问题的本质,就是Module
踩过的坑
第一个查到的解决办法是这个Android Studio中如何解决重复依赖导致的app:transformClassesWithJarMergingForDebug,但是他的问题是依赖另外一个库retrofit,她用了下面的办法:
compile ('com.squareup.retrofit2:converter-gson:2.1.0'){
exclude group: 'com.google.code.gson'
}
所以我也尝试仿照他的方法,在我的Speech模块下的build.gradle文件里修改
//注意:下面的方法是错的
dependencies {
compile fileTree(include: '*.jar', dir: 'libs'){ //错的
exclude group: 'com.google.code.gson', module: 'gson'
}
}
报错如下,显然这么写是不对的,对于依赖本地jar文件这么写是不对的:
Error:Could not find method exclude() for arguments [{group=com.google.code.gson, module=gson}] on directory '{include=*.jar, dir=libs}' of type org.gradle.api.internal.file.collections.DefaultConfigurableFileTree.
但是,他们的解决思路是对的,就是想办法屏蔽其中一个Gson库。既然如此,我们可以多尝试各个引入它们的地方。
解决办法
最后试来试去,才发现exclude需要写在App 主Module 的build.gradle文件中才能生效,而且注意 project(‘:Speech’) 外面那层括号:
apply plugin: 'com.android.application' //注意这是主Module
repositories {
mavenCentral()
}
dependencies {
// Module dependency
compile project(':passportSDKLib')
compile (project(':Speech')){
//解决Gson重复依赖问题,与passport-1.4.2.jar有冲突
exclude group: 'com.google.code.gson', module: 'gson'
}
compile project(':Skin')
compile fileTree(include: '*.jar', dir: 'src/main/libs')
}
唉,世界终于清静了。
最后再放一个AndroidStudio中新建一个空项目(Empty Activity)后默认的build.gradle中的解决重复依赖问题的配置
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//注意这里
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'
testCompile 'junit:junit:4.12'
}
相关文章
- android图片资源加密,Android平台图像文件加密
- 解决win10在安装Android-studio时提示HAXM无法安装问题[通俗易懂]
- android sdk manager安装,Android SDK Manager安装过程
- android 定时器实例,Android定时器和Handler用法实例分析
- android toast全屏,Android Toast实现全屏显示
- android attrs获取_关于Android attrs 自定义属性的说明
- android线程间通信的几种方法_Android进程间和线程间通信方式
- Android SDK Tools_android.intent.category.DEFAULT
- Android studio更新后出现警告:Warning:The `android.dexOptions.incremental` property is deprecated and it has
- Android Studio插件之sexy editor(设置AS背景)
- 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
- 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )
- 【Android Protobuf 序列化】Protobuf 使用 ( protobuf-gradle-plugin 插件简介 | Android Studio 中配置插件 | AS 中编译源文件 )
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
- 【错误记录】Android Studio 编译报错 ( Gradle 下载错误导致 Failed to open zip file 报错 )
- 【错误记录】Android Studio 编译报错 ( Cannot use connection to Gradle distribution . as it has been stopped. )
- 【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )
- 【错误记录】Android Studio 编译报错 ( This Gradle plugin requires a newer IDE able to request IDE model leve )
- 【Android Gradle 插件】settings.gradle 配置文件 ( 配置基本作用 | include 函数用法 | 目录层级配置 | 修改 Module 模块构建脚本名称 )
- 【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )
- 【错误记录】Android Studio 编译报错 ( Execution failed for task ‘:APP_MIDI:lintVitalRelease‘. )
- 【Android Gradle 插件】Gradle 扩展属性 ② ( 定义在根目录 build.gradle 中的扩展属性 | 使用 rootProject.扩展属性名访问 | 扩展属性示例 )
- 【Android Gradle 插件】Gradle 构建机制 ① ( 空白工程 Gradle 构建文件 | IntelliJ IDEA 工程构建文件 | Android Studio 工程构建文件 )
- 【错误记录】Android Studio 集成 ARoute 编译报错 ( 兼容 support 库和 androidx 库 | add ‘tools:replace=“android:appCo )
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ⑤ ( 优化 Gradle 构建脚本 | 构建脚本结构 | 闭包定义及用法 | 依赖配置 | android 块配置 )
- 【错误记录】Android Studio 编译报错 ( Could not resolve com.android.tools.build:gradle:7.4.2. )
- android版本检测Android程序的版本检测与更新实现介绍