Execution failed for task ':myapp:dexDebug'bin/java'' finished with non-zero exit value 2的解决思路

来源:互联网 发布:淘宝上买单簧管行吗 编辑:程序博客网 时间:2024/05/21 09:40

反正,不知道有多少人为题目标的错误烦恼,我是被整的心力憔悴.这个报错目前来看,报错原因有两个:
1.有重复的jar包
2.你的代码方法数量超过65k个.这里65k方法数是包括开源库里的方法也是算在内的.
起初,我不会看,一直百度finished with non-zero exit value 2. 也会有解决办法,比较经典的解决办法就是在build.gradle文件加上如下代码:

defaultConfig {    applicationId 'pkg'    minSdkVersion     targetSdkVersion     versionCode     versionName     // Enable MultiDexing:  https://developer.android.com/tools/building/multidex.html    multiDexEnabled true //把这个设置为true,就可以解决了}

multiDexEnabled 这个是分包的方法,他是有局限性的,下面我直接复制别人的话:

**虽然我们开起来multidex是一个极好的东西,但是multidex还是存在自己的局限性,我们在开发测试之前要清楚局限性是什么:
如果二DEX文件太大,安装分割dex文件是一个复杂的过程,可能会导致应用程序无响应(ANR)的错误。在这种情况下,你应该尽量的减小dex文件的大小和删除无用的逻辑,而不是完全依赖于multidex。
在Android 4.0设备(API Level 14)之前,由于Dalvik linearalloc bug(问题22586),multidex很可能是无法运行的。如果希望运行在Level 14之前的Android系统版本,请先确保完整的测试和使用。
应用程序使用了multiedex配置的,会造成使用比较大的内存。当然,可能还会引起dalvik虚拟机的崩溃(issue 78035)。
对于应用程序比较复杂的,存在较多的library的项目。multidex可能会造成不同依赖项目间的dex文件函数相互调用,找不到方法。**
所以,显然这种方法不是很好.但是继续找也找不到别的办法……╮(╯▽╰)╭心塞塞啊!!!为什么会这样?

这个错误呢,其实看的关键点并不是看finished with non-zero exit value 2这句,关键看下图我标的地方
这里写图片描述

我上图显示的错误就是说我方法数超过65k了.经过不懈的百度的情况下,我才知道原来

 compile 'com.google.android.gms:play-services:8.3.0'

这个包是相当的大的,就这个包就超过65k的方法数了.因为它包含了整个play-services API
google 其实已经知道了这个问题,并拿出了解决的办法.
下图为play-services的API列表

这里写图片描述

在选择API进行打包的时候,play-services-base无需单独指定,因为play-services-base会默认进行自动添加。
如果需要整个play-services API,则指定为 compile ‘com.google.android.gms:play-services:7.8.0’即可。
举子例子:
我只需要google的地图功能所以,我就改成了

 compile 'com.google.android.gms:play-services-maps:8.3.0'

运行,OK.终于解决了.
至于重包,会只要删除相关重复包就好了.

0 0
原创粉丝点击