【问题标题】:Conversion To Dalvik format Exception : Invalid dex bytecode offset转换为 Dalvik 格式异常:无效的 dex 字节码偏移
【发布时间】:2013-05-22 20:53:40
【问题描述】:

尝试使用 Eclipse Juno 使用 ADT v21 运行我的代码时出现以下错误。

[2013-05-28 10:08:39 - XYZ] Dx    
EXCEPTION FROM SIMULATION:  
[2013-05-28 10:08:39 - XYZ] Dx local 000c: invalid   

[2013-05-28 10:08:39 - XYZ] Dx ...at bytecode offset 00000c80   
locals[0000]: Lcom/sec/x/y/z;   
locals[0001]: I  
locals[0002]: I  
locals[0003]: Landroid/content/Intent;  
locals[0004]: Ljava/lang/String;  
locals[0005]: invalid  
locals[0006]: Ljava/lang/String;   
locals[0007]: invalid  
locals[0008]: invalid  
locals[0009]: invalid  
locals[000a]: invalid  
locals[000b]: Ljava/lang/String;  
locals[000c]: invalid  
locals[000d]: invalid  
locals[000e]: invalid  
locals[000f]: invalid 
locals[0010]: invalid 
locals[0011]: invalid 
...while working on block 0c80  
...while working on method onActivityResult IILandroid/content/Intent V   
...while processing onActivityResult (IILandroid/content/Intent V  
...while processing com/sec/x/y/z.class  

[2013-05-28 10:09:05 - XYZ] Dx 1 error; aborting   
[2013-05-28 10:09:05 - XYZ] Conversion to Dalvik format failed with error 1

此项目完美构建在 ADT v20 及以下版本之上。但它始终与 ADT v21 给出相同的错误。该错误不会发生在构建阶段。当我尝试使用 Eclipse 运行应用程序时会发生这种情况。

我已经阅读了数千个与此相关的主题。他们都没有工作。这肯定不是“清理/构建”问题。 对我来说,这似乎是一个 Eclipse 或 Proguard 问题。我已经为此浪费了将近 12 个小时的生命。请有人救救我。有人对此有任何线索吗?

【问题讨论】:

  • 当您使用最新版本的 ADT v22 运行它时会发生什么?就个人而言,在 Google I/O 期间,新的 ADT v22 搞砸了我的整个 Eclipse/ADT 设置,因为它改变了很多工具的位置,所以我怀疑它会为你做同样的事情,但是在我重新安装 Eclipse 和 ADT 之后v22 从头开始​​,加上全新的 Android-sdk 文件夹,一切都开始完美运行。
  • 您是否尝试过清理项目然后运行??
  • 我已经解决了这个问题。感谢所有帮助:)。我会在 4 小时后发布答案,暂时没有资格发布。
  • @TanDroiD 出了什么问题?

标签: android eclipse proguard dalvik dex


【解决方案1】:

我遇到了类似的问题,解决方案是将-keep class 放入引发类的proguard 配置中。在我的情况下,它是 Fabric(Crashlytics 库)中的一个类

-keep class io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue { *; }

【讨论】:

    【解决方案2】:

    我认为eclipse在使用它之前未能识别初始化局部变量。所以它在编写代码时不会向用户显示警告。但是 adt 编译文件失败。 根据 TanDroiD,如果您初始化变量,您的问题将得到解决。

    【讨论】:

      【解决方案3】:

      “locals invalid ... Conversion to Dalvik format failed with error 1”可能是ProGuard的优化步骤导致的,它不能始终保持局部变量的调试信息与代码上的优化保持一致。

      • 您可以通过不保留此调试信息来避免这种情况(不要指定 -keepattributes LocalVariableTable)。
      • 您可以通过禁用优化来解决此问题(将 -dontoptimize 添加到您的 proguard-project.txt)。
      • 您可以检查最新版本的 ProGuard 是否解决了问题(将 android-sdk/tools/proguard/lib/proguard.jar 替换为来自ProGuard 站点的最新版本)。
      • 如果更新到最新版本的 ProGuard 没有帮助,您可以报告错误。

      【讨论】:

        【解决方案4】:

        我自己解决了。在 onActivityResult (引发此错误的地方)在一个地方,我没有初始化 Integer 变量。通过初始化它,问题得到了解决。很奇怪。如果有人可以适当地解释这一点,我会推荐他/她的答案。

        之前:

        int x;
        

        之后

        int x = 0;
        

        就是这样!

        【讨论】:

          猜你喜欢
          • 2013-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-25
          • 2012-10-12
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多