1

尝试使用 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 个小时的生命。请有人救救我。有人对此有任何线索吗?

4

4 回答 4

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 没有帮助,您可以报告错误。
于 2013-05-29T22:28:24.830 回答
0

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

前:

int x;

int x = 0;

而已!

于 2013-05-29T00:58:50.860 回答
0

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

于 2013-12-11T03:57:28.040 回答
0

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

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

于 2015-03-24T13:50:20.393 回答