自从接触AS以来,不断的掉坑,在使用AS的过程中,很多问题解决的不是一帆风顺,都要卡克很久,所以在此记录一下之前遇到的“难题”,以后方便查阅。
一:Android 5.0以下出现java.lang.NoClassDefFoundError:
就是代码也没错误,但是一run就报错,当时测试的虚拟机是Android4.4.4的,很不幸运的是我找了几个测试机都是Android5.0一下的,包括模拟器。折腾了半天,装到自己的6.0手机上发现又没问题,才意识到因为系统版本不同会报错,最后测试只要是5.0一下就报错。闲扯了好多~~~~
解决方法:
1. 在主项目Gradle中配置`
dependencies
{
// 添加依赖
compile 'com.android.support:multidex:1.0.0'
}
2.使用自定义的Application继承MultiDexApplication,当然你不想大改自己的Application的话,也可以采取以下方法:重写Application中的voidattachBaseContext()方法
@Override
protected voidattachBaseContext(Context base)
{
super.attachBaseContext(base);
MultiDex.install(base);
}
然后继续 Build —-> ReBuild Project 即可,到这已经搞定了这个问题啦!
二:UNEXPECTED TOP-LEVEL ERROR: …………. finished with non-zero exit value 3
项目工程中添加了几个module后就签名打包到是可以正常工作,但是一run就error,也是搜了好久没解决掉,最后以 “finished with non-zero exit value 3 ”为关键词在stackoverflow上找到了答案。下面就是错误事例:
UNEXPECTED TOP-LEVEL ERROR:
Error:Execution failed for task ':DLNA_DMC:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_73\bin\java.exe'' finished with non-zero exit value 3
解决方法:在主工程build.gradle文件中添加几句代码OK,代码如下:
android
{
......
dexOptions
{
incremental true
javaMaxHeapSize "4g"
}
......
}
三:”Java.util.zip.ZipException: duplicate entry”,看到这个关键字毫不犹豫的知道是有冲突,但是哪里有冲突还是需要好好排查的,我的问题是引入的module和主工程中的都有v4包,毫不犹豫删除一个,但是问题接着还是有,具体问题事例代码如下:
Error:Execution failed for task ':app:transformClassesWithJarMergingForBaiduDebug'.
> com.Android.build.api.transform.TransformException: Java.util.zip.ZipException: duplicate entry: android/support/v4/internal/view/SupportSubMenu.class
解决方法:在build.gradle文件中添加即可:
allprojects
{
configurations
{
all*.exclude group: 'com.android.support', module: 'support-v4'
}
}
当然还有一个类似的问题:
Error:Execution failed for task ':app:transformClassesWithJarMergingForBaiduDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class
解决方法和上面一个问题略有不同,当然它俩是可以合并的:
allprojects
{
configurations
{
all*.exclude group: 'com.android.support', module: 'support-annotations'
}
}
到目前为止碰到的这几个问题,对于一个AS新手来说还是有点挑战的,不过还好,大神很多,他们不仅帮到了我,在此记录一下,希望帮到更多的人。