Eclipse dex 65536 问题解决方案

本文介绍了解决Android应用中因方法数超过65536而产生的Eclipse Dex 65536问题的方法。通过使用Ant工具合并不重要的第三方jar包并转换为额外的dex文件,再利用MultiDex库实现在应用启动时动态加载。

Eclipse dex 65536 问题解决方案

一、问题产生原因

报错信息:

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值