Android 解决方法数超上限遇到的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l346397807/article/details/49566145

工程中引入了太多的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文件放到主工程的响应的目录下,重新进行编译





阅读更多
换一批

没有更多推荐了,返回首页