工程中引入了太多的jar包,最终导致eclipse 编译报错,方法数超出上限,废了半天的时间最终还是解决了,但是不得不把项目迁移到Android studio 的环境下,eclipse下尝试了网上的n种方法,都没有得到解决,下面简单的说一下gradle 配置多dex打包过程中应该注意的一些问题:
1.UNEXPECTED TOP-LEVEL EXCEPTION
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
$ANDROID_SDK/build-tools/android-4.4W/dx --dex --num-threads=4 --multi-dex
...
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Library dex files are not supported in multi-dex mode
at com.android.dx.command.dexer.Main.runMultiDex(Main.java:322)
at com.android.dx.command.dexer.Main.run(Main.java:228)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
对于dex 的--multi-dex 选项设置与预编译的library工程有冲突,因此如果你的应用中包含引用的lirary工程,需要将预编译设置为false:
android {
// ...
dexOptions {
preDexLibraries = false
}
}
2.
OutOfMemoryError: Java heap space
UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: Java heap space
在 dexOptions 中有一个字段用来增加java堆内存大小:
android {
// ...
dexOptions {
javaMaxHeapSize "2g"
}
}
3.将 android-support-multdex.jar包放到libs目录下进行编译,出现如下错误:
Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: android/support/multidex/MultiDex.class
解决方法:
在gradle脚本的dependencies中加入compile 'com.android.support:multidex:1.0.0',并从工程的libs目录下删除multidex包,gradle会自动去sdk目录下面找(注意并不是去repositories下载,repositories中是没有这个包的,所以我们需要做第一步); 再次编译就可以正常工作
4.编译通过后,运行不起来,提示某些类库中的so找不到,可是类库中的so明明已经正常引用了
解决方法:
将类库中so文件放到主工程的响应的目录下,重新进行编译