关于导很多jar包和类库之后出现的问题

原创 2016年07月24日 23:58:37

在项目中难免接入很多第三方的功能,这其中就很容易出现jar包重复、重复编译的问题,jar包重复和重复编译的问题有很多解决办法。

问题的表现形式多为这些:

一、包重复导致的问题(常见第三方中引入了包而项目中再次引入了该包)

(1)问题表现形式一:

Error:Execution failed for task ':JQ_ELOVE:transformClassesWithDexForRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'E:\Java\jdk1.7.0_71\bin\java.exe'' finished with non-zero exit value 2

网上给出的很多办法都是这样解决:

defaultConfig {
        multiDexEnabled true
    }
不能说这种方法不好,在我的问题中这种办法帮我找到了问题的根源,因为我设置了上述这个之后,出现了其他问题(v4包和第三方包的重复问题),这样具体的问题让我很方便找到了解决办法(当然如果重复包太多,也许上述方法可以更方便的解决问题?没有测试不清楚),其实并不是只有上述办法才可以找到具体的重复问题,比如我的重复包重复问题其实是这样的:在上述问题表现形式1的前面其实还分别伴有着这句话:

a种:Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;

b种:Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/hyphenate/EMCallBack;

其实我在拿自己的问题举例了:a种 v4包的问题;b种hyphenate的问题。

当然网上给出的这种办法对于我这个问题不好用,但是帮我找到了我没有注意到的报错信息,设置对应的方法来解决上述两个问题:

a种:

configurations { all*.exclude group: 'com.android.support', module: 'support-v4' }
b种:

直接删除项目中的jar包,并且将build.gradle中的compile去掉。


(2)问题的表现形式二:

Error:Execution failed for task ':JQ_ELOVE:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK assets/logo_h.png
File1: F:\jobworkspace\Elove\JQ_ELOVE\libs\BaiduLBS_Android.jar
File2: F:\jobworkspace\Elove\JQ_ELOVE\build\intermediates\exploded-aar\Elove\easeui\unspecified\jars\classes.jar

由于这个问题是之前发现的,以至于我猜想这个问题的上面是不是还有其他提示cause之类的,当时从网上找到的解决办法大都是:

packagingOptions {
    exclude 'assets/fps_images.png'
  }
之类的,当然可能对于一些零散的重复文件这种方法是比较好的,但是对我来说当时也是包重复,我就按照这种方法把错误一直exclude到消失,结果可想而知,太累了也太傻了,后来直接删掉包ok。

二、重复编译的问题(其实我个人感觉是伪问题)

在我查找解决办法的过程中,在stackoverflow上面看到了一个对于“问题一表现形式一”这样的解决办法:

网友是这样表述的:

I didn't see "compile fileTree(dir: 'libs', include: ['*.jar'])" it was compiling twice my libraries。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile files('libs/okhttp-3.2.0.jar')
    compile files('libs/okio-1.7.0.jar')
    compile files('libs/open_sdk_r5509.jar')
    compile files('libs/SocialSDK_QQZone_3.jar')
    compile files('libs/SocialSDK_Sina.jar')
    compile files('libs/SocialSDK_WeiXin_1.jar')
    compile files('libs/SocialSDK_WeiXin_2.jar')
    compile files('libs/umeng_social_sdk.jar')
    compile files('libs/weiboSDKCore_3.1.4.jar')
    compile files('libs/mta-sdk-1.6.2.jar')
    compile files('libs/fastjson-1.1.34.android.jar')
    compile project(path: ':easeui')
    compile 'com.android.support:support-v4:22.2.1'
    compile 'com.android.support:design:22.2.1'
    compile 'com.google.code.gson:gson:2.6.2'
    compile files('libs/BaiduLBS_Android.jar')
    compile files('libs/aliyun-oss-sdk-android-2.2.0.jar')
    compile 'com.baoyz.actionsheet:library:1.1.5'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.github.sd6352051.niftydialogeffects:niftydialogeffects:1.0.0@aar'
    compile files('libs/hyphenatechat_3.1.3.jar')
}
第一句其实已经编译了libs下的jar包,而上面文件中在第一句的配置下又每个都单独写了一个compile,这样存在重复编译的问题,在问题中的网友表示是通过注释掉下面的重复编译的包才得以解决了第一个问题,但是我并不认为是这样,因为首先我之前一直这样打包也并没有发生什么错误。其次,我看了网友注释掉的部分,并不都是libs下的compile,有的是com开头的包,要知道com开头的包注释掉这个包会从项目中除去,所以应该是网友刚好注释掉了重复的包,而这个包刚好又可以通过注释而清除出项目。当然这只是我的推断,具体我不了解该网友项目当时的具体情况。

之所以拿出来说,其实也是因为我之前一直没留意第一句,因为我们每次加入jar包add as library时studio自动添加compile,所以没有考虑过重复编译的问题。之前也就没有这个概念。而我注释掉下面libs下的jar包的compile之后,项目依然可以正常打包。所以,又涨姿势了。


至此,这篇文章也就结束了,但是对于上述很多内容有过经历的网友,希望不吝给出一些自己的看法,免得给更多的人造成误导。





很多人明白很多大道理,但是依旧过不好这一生。

要好好活着,因为会死很久。--------生命短暂,要好好享受生活,不要因为一些事情而影响心情。



studio报com.android.dex.DexException: Multiple dex files define Lcom/umeng/analytics错误

今天在使用友盟统计分析的时候报如下错误:com.android.dex.DexException: Multiple dex files define Lcom/umeng/analytics ...
  • lzq520210
  • lzq520210
  • 2015年12月11日 11:37
  • 1773

Android之QQ授权登录获取用户信息

有时候我们开发的app需要方便用户简单登录,可以让用户使用自己的qq、微信、微博登录到我们自己开发的app。 今天就在这里总结一下如何在自己的app中集成QQ授权登录获取用户信息的功能。 首先我们...
  • bear_huangzhen
  • bear_huangzhen
  • 2015年06月23日 10:40
  • 33346

Android Studio 不错的开源库

/*仿IOS加载框*/ compile 'com.baoyz.actionsheet:library:1.1.5' /*仿IOS-UIActionSheet控件,https://github.com/...
  • daditao
  • daditao
  • 2016年01月27日 11:17
  • 3274

Android studio jar冲突 文件冲突 aar引用相同的文件 引用相同的jar包 重复导入相同依赖包

开发项目,多多少少都会引进一些第三方jar或者aar资源文件,方便开发个性化功能,但这样就经常会出现包冲突、文件冲突、重复导入资源或者导入俩个不同的包中包含有相同的文件资源呢!后果导致编译失败,提示错...
  • WX_JIN
  • WX_JIN
  • 2016年03月11日 10:03
  • 13136

关于导很多jar包和类库之后出现的问题

在项目中难免接入很多第三方的功能,这其中就很容易出现jar包重复、重复编译的问题,jar包重复和重复编译的问题有很多解决办法。 问题的表现形式多为这些: 一、包重复导致的问题(常见第三方中引入了包...
  • dhasa1991
  • dhasa1991
  • 2016年07月24日 23:58
  • 1142

Android Studio 使用Gradle引入第三方库文件的总结

Android Studio 引入第三方库文件的总结
  • wenbitianxiafeng
  • wenbitianxiafeng
  • 2016年07月21日 09:48
  • 13784

Gradle 编译多个工程(包含多Library库工程依赖)指导

在实际开发中有很多工程引用到了android-support-v4.jar或者其他的jar包资源; 有时候,在每个library库的libs里都放进android-support-v4.jar 在ec...
  • changemyself
  • changemyself
  • 2014年10月10日 13:54
  • 28955

关于导很多jar包和类库之后出现的问题

最近公司项目需求导了很多的jar包和类库。遇到了许多问题,在这个过程中各种错误各种报,还都是编译能通过运行通不过的错误。给人整的那叫一个懵。在这里将自己遇到的问题以及解决方案分享出来以供大家共同学习 ...
  • qq_33234564
  • qq_33234564
  • 2016年06月01日 22:51
  • 5525

AndroidStudio中导入jar包和类库

jar包的导入AndroidStudio中导入jar包和Eclipse中类似,都可以把jar包直接复制粘贴到libs目录下,如图: 完了,点击这个jar包,右键如图,选择Add As Libra...
  • zxyudia
  • zxyudia
  • 2016年10月24日 16:34
  • 587

导入第三方类库和jar包时出现的错误和过慢的问题(环信demo)

Android Studio Gradle Build Running 特别慢的问题 Error:Execution failed for task ':transformClassesWithJ...
  • qq_35816104
  • qq_35816104
  • 2016年10月27日 00:51
  • 283
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于导很多jar包和类库之后出现的问题
举报原因:
原因补充:

(最多只允许输入30个字)