您的位置:首页 > 编程语言 > Java开发

dex分包 轻松解决解决65535的限制

2016-07-25 13:44 453 查看
进来的同学应该对下面这行异常眼熟吧。

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

直接进入正题~

用于本人在使用eclipse做开发,所以一开始不断的尝试用gradle插件来解决方法数超限问题,目前仍未成功。

但是跳过gradle配置文件来看本质,其实就是将项目中一个dex文件分成了多个dex文件,然后在安装程序运行时class.dex中Application会去加载其他dex文件。由此可以设想将android项目中的部分jar包打包成dex文件,并命名为classes2.dex(之前没注意卡了好久),然后放入主工程项目中,在打包时会一并打入apk文件,而打包为classes2.dex的jar包则使用编译依赖到工程中(例如android.jar)。具体做法是:

    1、先将引用的jar包合并打包为dex文件,并命名为classes2.dex

        合并jar : 手动合并:将libs目录下的jar包放入同一文件夹

         使用ant合并:需要配置ant环境,然后新建build.xml文件(下面是xml内容)

                             命令行输入:ant -buildfile文件夹所在路径\build.xml  

                   <?xml version="1.0" encoding="utf-8"?>  

                            <project name="b" basedir="E:\libs" default="makeSuperJar">  

                            <target name="makeSuperJar"  description="description">  

                                <jar destfile="all.jar">  

                                        <zipfileset src="activation.jar"/>   

                                        <zipfileset src="additionnal.jar"/>          

                                        <zipfileset src="alipaysdk.jar"/>   

                                </jar>  

                            </target>  

                            </project>

all.jar为合并后的jar文件名。可以自己修改

                然后将合并后的jar通过sdk中的dx命令转为dex文件

打开CMD 定义到sdk\build-tools\23.0.3目录下

输入   dx --dex --output=F:\libs\classes2.dex F:\libs\all.jar

F:\libs\classes2.dex为输出位置及输出的dex的文件名(名称不可更改,路径可自定义)

F:\libs\all.jar 为上个步骤合并的jar的路径。

最后将classes2.dex放入主工程内src目录下,all.jar放入主工程目录下。在Java build path中添加all.jar。

导入android-support-multidex并继承Application重写attachBaseContext。

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}

        

注:Application 中的静态全局变量会比MutiDex的 instal()方法优先加载,所以建议避免在Application类中使用引用classes2.dex文件的静态变量

      2、将classes2.dex文件复制到你主工程的src目录下,这样在打包时会一并打入apk中。           

      3、将步骤1中的合并jar文件依照android,jar方式引入,这样在打包时就不会打入apk

以上步骤本人亲自操作成功。。目前没有什么问题。

较为便捷的方法,记录在此与大家分享。本人菜鸟一枚有问题的话可以一起讨论讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  eclipse android 异常 65536