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
答案 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的唯一方法。
答案 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,请按照下列步骤操作:
编辑主模块(app)的build.gradle文件
android {
defaultConfig {
...
multiDexEnabled true
}
}
dependencies {
...
compile 'com.android.support:multidex:1.0.1'
}
告诉您的应用程序类处理这些更改。
您可以编辑自定义应用程序类以启用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>
API级别14及以下版本有限制。您的应用程序可能无法编译或运行低于API级别14.在编译时,您可以获得OutOfMemory异常。要解决此问题,请将以下内容添加到build.gradle
dexOptions {
jumboMode true
javaMaxHeapSize "4g"
}