美文网首页
Eclipse dex 65536 问题解决方案

Eclipse dex 65536 问题解决方案

作者: goodlogic | 来源:发表于2018-04-27 11:36 被阅读0次

    一、问题产生原因

    报错信息:

    Unable to execute dex: method ID not in[0, 0xffff]: 65536

    产生原因:

    早期的Dalvik VM内部使用short类型变量来标识方法的id,最大值限制在65536,故单个dex文件内的方法数目限制不能超过65536个,当项目中包含太多的方法或引用了过多的第三方jar包时,就容易发生方法数目超过65536,此时编译APK时就会发生Unable to execute dex这个问题。

    二、解决方案

    实现方法:

    将项目中不重要的jar包集中用ant打包成一个jar包,然后再用SDK下build-tools目录里的
    
    dx.bat将这个jar包编译为classes2.dex文件,在APP启动后动态加载这个分包dex。
    
    

    1.下载Ant工具 apache-ant-1.10.3-bin.zip

        配置系统环境变量,ANT_HOME : D:\soft\apache-ant-1.10.3(根据自己目录),Path : ;%ANT_HOME%\bin;
    

    2.创建build.xml配置文件,此文件用于ant合并jar包

        其中project标签里的'basedir'属性填写jar包所在的文件夹路径(路径随意);
    
        jar标签里的'destfile'为合并后的名字(名字随意);
    
        zipfileset标签里的'src'为要合并的jar包名字;
    
        注意不要把APP启动时加载的jar包进行合并,不然可能导致找不到类错误
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <project name="con" basedir="D:\workspace\MyProject\libs" default="makeSuperJar">
    <target name="makeSuperJar" description="description">
        <jar destfile="all.jar">
            <zipfileset src="gson-2.0.jar"/>
            <zipfileset src="zxing.jar"/>
            <zipfileset src="nineoldandroids-2.4.0.jar"/>
            <zipfileset src="universal-image-loader-1.9.3.jar"/>
    
        </jar>
    </target>
    </project>
    

    3.执行命令: ant -buildfile D:\workspace\MyProject\libs\build.xml

    01

    执行成功后会生成合并后的all.jar包

    02

    4.然后到安卓SDK build-tool目录里使用dx.bat将合成的all.jar包编译成classes2.dex文件,执行命令:

    dx --dex --output=D:\workspace\MyProject\libs\classes2.dex D:\workspace\MyProject\libs\all.jar

    03

    执行成功后会在libs目录下生成classes2.dex文件

    04

    5.将classes2.dex文件放在项目的src根目录下

    05

    6.导入multidex库到项目中 (点击链接下载)

    06

    7.在项目的BaseApplication类里重写attachBaseContext方法,执行分包

    07

    8.在Java Build Path里将合成过的包对勾取消掉,因为这些包已经在classes2.dex存在,无需再次打包进dex

    08

    9.编译运行程序,解压apk文件,可以看到已被分成了两个dex

    09

    END

    相关文章

      网友评论

          本文标题:Eclipse dex 65536 问题解决方案

          本文链接:https://www.haomeiwen.com/subject/wqjblftx.html