转换为Dalvik格式异常:无效的索引字节码偏移



当尝试使用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个小时的时间。请救救我吧。有人知道这方面的线索吗?

"local invalid…"转换为Dalvik格式失败,错误1"可能是ProGuard的优化步骤导致的,它不能总是保持关于局部变量的调试信息与代码的优化一致。

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

我自己解决了。在onActivityResult(这个错误被抛出)在一个地方,我没有初始化一个整数变量。通过初始化它,问题得到了解决。非常奇怪。如果有人能恰当地解释这个问题,我将推荐他/她的答案。

:

int x;

int x = 0;

这是它!

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

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

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

相关内容

  • 没有找到相关文章

最新更新