android studio编译运行各种踩坑解决方案

1、大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.support-multidex进行解决,但是你也许会遇到下面这样的错误,不由得让你冥思苦想,这个出错原因一般是引入了多个相同的包,但是你打开一开,libs下明明就只有一个包呀,让人头疼。

Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.

> java.util.zip.ZipException: duplicate entry: android/support/multidex/MultiDex.class

解决方案如下:首先删掉libs下面的jar包,并解除依赖,然后在gradle脚本中,加入compile 'com.android.support:multidex:1.0.1'


(当前最新版本是1.0.1),顺利解决。

 

2、相信下面这个问题也比较常见,至少楼主遇到很多次了,前面没做笔记,搞的每次都要重新去理解,所以这个问题必须总结一下,杂一看又是v4包重复了。

* What went wrong:
Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class

具体解决方案为:由于很多第三方包都会用到v4支持包,这样在你导入多个支持的时候难免会出现这样的错误,只需在build.gradle里面添加上

configurations {

  all*.exclude group: 'com.android.support', module: 'support-v4'

}

然后clean一下工程再build就好。记住必须先clean,不然还是无法解决!!

 

3、什么?这还不够狠?给你来个更能节省找问题时间的。大家都知道我们在android开发过程中或多或少会引入module,不仅可以提高项目的开发进度,而且项目管理起来也会相当方便。

但是!!!!你可能会遇到在同一个项目中引入多个module,而这些module又因为引入了同一个jar包或者有冲突的jar包的时候,这样你可能可以通过编译,但是你打包apk会直接报错有木有?如果你一个是module,一个是直接在app下的build.gradle添加的依赖,打包时候看到二次引入,你估计会想:什么?二次引入?你可能根本丈二的和尚摸不着头脑,因为也许你依赖了很多三方的东西,而你竟然不知道哪个用了这个jar包导致了这个异常,的确让人心力交瘁,蓝瘦香菇。

 

在解决问题之前,我还是想在这里多说几句,说下关于module的集中依赖的区别,如果想直接看解决方案的请跳:

1) compile:它是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。

2) provided:它是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终的apk。

3)   apk:只会打包到apk文件中,而不参与编译,所以不能在代码中直接调用jar中的类或者方法,否则编译时报错。

4) test compile:它仅仅是针对单元测试代码的编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起任何作用。

5) debug compile:它仅仅针对debug模式的编译和最终的debug apk打包。

6) release compile:仅仅针对release模式的编译和最终的release apk打包。

 

回归正题,这样的解决方案是什么:

直接看打包的错误打印,找到module中这个二次引入的jar包,把compile更改为provided,这样在写代码的时候可以在所属的module中正常使用jar包中的类,而生成的apk不会包含该jar包。这样在编译的时候由于只有一个jar包编译进apk,便不会发生上面所说的二次引入的冲突错误了。

 

【注】使用provided必须删除compile fileTree(include: ['*.jar'], dir: 'libs') 不然lib下的jar均按照compile方式引入到Module。

 

还是来个例子:我在项目中用了一堆堆的compile,而由于集成了环信的easeui,又因为其使用了glide的jar包,所以导致我在release的时候,glide发生了冲突,所以我采用了上面的解决方案,得到了成功解决。下面是easeui的build文件。我把glide换成了provided。

 

to be continue......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值