dex loader无法执行dex:方法ID不在[0,0xffff]:65536中

时间:2014-09-19 07:16:40

标签: android eclipse dalvik

iam构建我的应用程序我遇到了这个错误

Dx警告:忽略匿名内部类的InnerClasses属性 (com.amazonaws.javax.xml.stream.xerces.util.SecuritySupport12 $ 4)没有附带 关联的EnclosingMethod属性。这堂课可能是由一个 没有以现代.class文件格式为目标的编译器。推荐 解决方案是使用最新的编译器从源代码重新编译类 并且没有指定任何“-target”类型选项。无视的后果 这个警告是这个类的反射操作会不正确 表明是一个内部类。

Dex Loader]无法执行dex:方法ID不在[0,0xffff]:65536中 转换为Dalvik格式失败:无法执行dex:方法ID不在[0,0xffff]中:65536

6 个答案:

答案 0 :(得分:53)

检查构建路径 - > Java构建路径 - >订单和导出标签 - >取消选中Android私人Librairies。

如果仍然无效,请将以下行:dex.force.jumbo=true添加到project.properties文件中。

可能的原因可能是构建路径中的大型jar。

修改: 这是不推荐使用的,因为如果您想摆脱这些恼人的问题,Google不再支持Eclipse:使用Android Studio并启用Multidex。

答案 1 :(得分:12)

Driss Bounouar 解决方案实际上可以帮助您构建项目,但是在实现之后您的应用程序可能会在某些地方崩溃,我认为它实际上会在编译时抑制该问题。

我在控制台遇到的错误是: -

Dex Loader] 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

[2014-11-08 15:51:58 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(jnamed$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
[2014-11-08 15:51:58 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(jnamed$2) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
[2014-11-08 15:51:58 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(jnamed$3) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
[2014-11-08 15:51:59 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.xbill.DNS.UDPClient$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

根据这个Trace,我曾尝试使用相同和最新的编译器重新编译我的所有项目,但仍然没有取得任何成功。

稍后用旧版替换最新 google Play服务 修复了我的问题。

我在几个小时之前更新了我的 google play服务,并在之后开始收到此错误。

修改

要了解您应该查看的实际问题Building Apps with Over 65K Methods在我们的情况下,旧版Google Play服务的方法数量较少,因此项目已成功编译。

<强>简

我们整个项目被编译成一个dex文件,限制为65K方法。但现在您可以在项目中启用multidex文件。 到目前为止可用的解决方案仅适用于GRADLE(Android Studio),我还没有找到任何方法让它在Eclipse上运行。

答案 2 :(得分:8)

我刚刚在使用Google Play服务时找到了在Eclipse上解决此问题的替代方案。 因为在Eclipse上似乎没有办法像在Android Studio(和Gradle)中那样使用multidex,这似乎是现在使用Eclipse rigth的唯一方法。

  1. 进入google-play-service-lib项目
  2. 进入libs
  3. 解压缩文件google-play-services.jar
  4. 进入解压缩文件夹并删除所有不需要的文件夹(例如,如果您需要Google Analytics,则可以删除广告,游戏,地图,钱包,广告等)。
  5. 再次压缩这样一个文件夹(现在只包含所需的库)和MANIFEST文件夹
  6. 在项目中使用这样的新jar。

答案 3 :(得分:4)

经历过同样的问题。问题出在 google-play-services_lib 项目中。 它包括许多功能。此问题已在21及更新版本中修复 谷歌播放-services_lib。

  

要修复multi-dex问题,您应该完全删除旧的lib项目并使用    google-play-services_lib_v_21 或更新。

例如,我使用了这个:google-play-services

P.S。另请注意,官方google play setup docs说:

  

您应该引用复制到开发工作区的库的副本 - 您不应该直接从Android SDK目录引用该库。

答案 4 :(得分:0)

我最近也将谷歌游戏库更新到版本29,我的应用程序达到了2 ^ 16的限制!我降级到第26版,我知道它对我有用,而且确实有。

使用Eclipse进行开发现在似乎变得相当不稳定,因此建议跟踪所有已安装软件包的所有版本!

从长远来看,解决方案是切换到Android Studio。

答案 5 :(得分:0)

您收到此错误主要是因为dalvik可执行文件存在限制,显然限制为65536,即2 ^ 16。

您必须为Android应用程序启用multi-dex配置。 要启用multi-dex,请按照下列步骤操作:

  1. 编辑主模块(app)的build.gradle文件

     android {
      defaultConfig {
        ...
       multiDexEnabled  true
     }
    }
    
    dependencies {
        ...
      compile 'com.android.support:multidex:1.0.1'
    }
    
  2. 告诉您的应用程序类处理这些更改。

    您可以编辑自定义应用程序类以启用multi-dex支持。

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

    OR

    public class MyApplication extends MultiDexApplication{
    
    }
    

    OR

    编辑AndroidManifest.xml文件以将更改应用于应用程序标记

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

  3. API级别14及以下版本有限制。您的应用程序可能无法编译或运行低于API级别14.在编译时,您可以获得OutOfMemory异常。要解决此问题,请将以下内容添加到build.gradle

    dexOptions {
        jumboMode true
        javaMaxHeapSize "4g"
    }