错误1、
错误示例:
Java.util.concurrent.ExecutionException:
java.lang.Illegal State Exception:
Multi dex requires Build Tools 21.0.0 / Current: 20的异常
解决方法:
修改 build.gradle
Android {
compileSdkVersion 20
buildToolsVersion '21.0.0'
然后会提示更新tools,点击更新就行了。
错误2、
support-annotations库和v4包冲突
错误示例:
Error:Execution failed for task
':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException:
java.util.zip.ZipException: duplicate entry:
android/support/annotation/AttrRes.class
错误提示说有重复的引用这里指向了android/support/annotation/AttrRes.class
使用快捷键Ctrl+N快速查找项目中所有的AttrRes文件
我这里出现了两个,所以很有可能是这里的问题
一个是在v7包下v4包下android.support.annotation中
另个是在D:\kaifagongju\android-sdk-windows\extras\android\support\annotations中
也就是在我们的android sdk当中已经内置了该文件。
解决方法:
选择其一删除。
其他类似只要是重复问题都可以用这个办法解决。
错误3、
示例:
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> 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
'D:\Program Files\Java\jdk1.8.0_11\bin\java.exe'' finished with non-zero exit value 3
该类异常一般是在导入之前的eclipse项目时,由于lib过多出现重复引入,或方法超过规定的64k,出现溢出的情况。
也有可能是tools版本过低的问题。
解决方案:
检查项目下各个model的buildToolsVersion版本是否一致,不一致的话修改成最新的。
在app的model下
android {
compileSdkVersion 23
buildToolsVersion '25.0.2'
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
//multidex设为启用
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
// 保证其他的lib没有被preDex,分配限制内存
dexOptions {
preDexLibraries = false
javaMaxHeapSize "4g"
}
}
同时引入包
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
project下加入
// 保证dex_files文件中指定的文件都加载到Main Dex中
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = []
}
dx.additionalParameters += '--multi-dex'
dx.additionalParameters += "--main-dex-list=$projectDir/dex_files".toString()
}
}
最后在Application中重写attachBaseContext方法
这里建议自定义一个新的MyApplication继承Application,
public class SoftApplication extends Application {
......
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
最后在AndroidMainfest.xml中把application修改成我们自己的
<application
android:name="com.MyApplication"
android:allowBackup="true"
android:icon="@drawable/img_logo"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
......
</application>
参考文章 :
1、解决AndroidStudio添加ProjectLibary后在编译时遇到的各种问题之解决方式索引(finished with non-zero exit value and so on...)
2、什么是MultiDex
3、Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
4、finished-with-non-zero-exit-value-3