Android开发Eclipse环境中dex 65536(超方法数)问题解决方案

转载文章:原文 https://blog.csdn.net/lianqiangjava/article/details/80105103  

前言

  • android studio下超方法数的问题直接引用MutilDex进行分包就ok了
  • 但是eclipse下 就需要进行手动分包操作

错误信息

    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。

 

将项目中不重要的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包

 

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文件

 

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

 05

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

 06

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

 07

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

 08

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

09
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值