无法执行DEX:方法ID不是在[0,0xFFFF的]:65536 [英] Unable to execute dex: method ID not in [0, 0xffff]: 65536

查看:174
本文介绍了无法执行DEX:方法ID不是在[0,0xFFFF的]:65536的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看过各种版本的DEX误差修改前的,但是这一个是新的。清洁/重启等不会帮助。库项目似乎完好无损,并依赖似乎是正确链接。

 无法执行DEX:方法ID不是在[0,0xFFFF的]:65536
转换到的Dalvik格式失败:无法执行DEX:方法ID不是在[0,0xFFFF的]:65536
 

TL;博士:从谷歌官方的解决方案终于来了。

<一个href="http://developer.android.com/tools/building/multidex.html">http://developer.android.com/tools/building/multidex.html

只有一个小技巧,你可能会做DEX-ING的时候需要做的这prevent内存不足。

  dexOptions {
        javaMaxHeapSize4G
}
 

解决方案

更新3(2014年11月3日)
谷歌终于发布了官方说明


2更新(2014年10月31日)
摇篮插件v0.14.0为Android 增加了支持多地塞米松。要启用,你只需要在声明它的 build.gradle 的:

 安卓{
   defaultConfig {
      ...
      multiDexEnabled =真
   }
}
 

如果您的应用程序支持的Andr​​oid 5.0以前的(也就是说,如果你的的minSdkVersion 20或以下),你还必须动态地修补的应用程序类加载器,所以这将是能够从次级索引装载类。幸运的是,有一个,做你们。将它添加到您的应用程序的依赖关系:

 相关性{
  ...
  编译com.android.support:multidex:1.0.0
}
 

您需要尽快拨打类加载器补丁code。 MultiDexApplication 类的<​​一个href="http://developer.android.com/reference/android/support/multidex/MultiDexApplication.html">documentation提出了三种方法来做到这一点(接他们中的一个,一个是您最方便的):

1 - 声明 MultiDexApplication 类应用程序中的你的的Andr​​oidManifest.xml 的:

 &LT; XML版本=1.0编码=UTF-8&GT?;
&LT;舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.example.android.multidex.myapplication&GT;
    &lt;应用
        ...
        机器人:名称=android.support.multidex.MultiDexApplication&GT;
        ...
    &LT; /用途&gt;
&LT; /舱单&GT;
 

2 - 让你的应用程序类扩展<一个href="http://developer.android.com/reference/android/support/multidex/MultiDexApplication.html">MultiDexApplication类:

 公共类MyApplication的扩展MultiDexApplication {..}
 

3 - 呼叫 MultiDex#安装应用程序#attachBaseContext 方法:

 公共类MyApplication的{
    保护无效attachBaseContext(上下文基地){
        super.attachBaseContext(基峰);
        MultiDex.install(本);
        ....
    }
    ....
}
 


更新1(二零一四年十月一十七日):
正如预期的那样, multidex支持是装在Android的支持库的修订21。你可以找到Android的支持 - multidex.jar于/ SDK /演员/安卓/支持/ multidex /库/ libs文件夹中。


多DEX支持,解决了这个问题。 DX 1.8已经可以生成若干DEX文件。
安卓L时可以支持多点DEX本身,和支持库的下一个版本将会覆盖旧版本回API 4.

这是在<一说href="http://androidbackstage.blogspot.com/2014/08/android-developers-backstage-episode-11.html">this Android开发者后台播客节目安瓦尔Ghuloum说。我张贴成绩单(和一般的多-dex说明有关部分)。

I have seen various versions of the dex erros before, but this one is new. clean/restart etc won't help. Library projects seems intact and dependency seems to be linked correctly.

Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

tl;dr: Official solution from Google is finally here!

http://developer.android.com/tools/building/multidex.html

Only one small tip, you will likely need to do this to prevent out of memory when doing dex-ing.

dexOptions {
        javaMaxHeapSize "4g"
}

解决方案

Update 3 (11/3/2014)
Google finally released official description.


Update 2 (10/31/2014)
Gradle plugin v0.14.0 for Android adds support for multi-dex. To enable, you just have to declare it in build.gradle:

android {
   defaultConfig {
      ...
      multiDexEnabled = true
   }
}

If your application supports Android prior to 5.0 (that is, if your minSdkVersion is 20 or below) you also have to dynamically patch the application ClassLoader, so it will be able to load classes from secondary dexes. Fortunately, there's a library that does that for you. Add it to your app's dependencies:

dependencies {
  ...
  compile 'com.android.support:multidex:1.0.0'
} 

You need to call the ClassLoader patch code as soon as possible. MultiDexApplication class's documentation suggests three ways to do that (pick one of them, one that's most convenient for you):

1 - Declare MultiDexApplication class as the application in your AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

2 - Have your Application class extend MultiDexApplication class:

public class MyApplication extends MultiDexApplication { .. }

3 - Call MultiDex#install from your Application#attachBaseContext method:

public class MyApplication {
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
        ....
    }
    ....
}


Update 1 (10/17/2014):
As anticipated, multidex support is shipped in revision 21 of Android Support Library. You can find the android-support-multidex.jar in /sdk/extras/android/support/multidex/library/libs folder.


Multi-dex support solves this problem. dx 1.8 already allows generating several dex files.
Android L will support multi-dex natively, and next revision of support library is going to cover older releases back to API 4.

It was stated in this Android Developers Backstage podcast episode by Anwar Ghuloum. I've posted a transcript (and general multi-dex explanation) of the relevant part.

这篇关于无法执行DEX:方法ID不是在[0,0xFFFF的]:65536的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆