2013-05-28 2 views
1

Eclipse Juno를 사용하여 ADT v21로 코드를 실행하려고하면 다음 오류가 발생합니다.Dalvik 형식으로 변환 예외 : 잘못된 dex 바이트 코드 오프셋

[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를 사용하여 응용 프로그램을 실행하려고 할 때 발생합니다.

나는 이것과 관련하여 수천 개의 스레드를 읽었습니다. 그리고 그들 중 누구도 일하고 ​​있지 않습니다. 이것은 확실히 "Clean/Build"문제가 아닙니다. Eclipse 또는 Proguard와 같은 것으로 보입니다. 나는 이것에 나의 생활의 12 시간 종일 낭비했다. 제발 누군가 구해줘. 이것에 대한 단서가있는 사람은 누구입니까?

+0

당신이이 최신 버전의 ADT의 V22과 함께 실행하면 어떻게됩니까? 개인적으로 Google I/O에서 새로운 ADT v22는 많은 도구의 위치를 ​​변경했기 때문에 Eclipse/ADT 설정 전체를 엉망으로 만들었습니다. 따라서 동일한 도구를 사용할 것으로 생각되지만 Eclipse와 ADT를 다시 설치 한 후 v22, 처음부터 완전히 새로운 Android-sdk 폴더로 완벽하게 다시 작동하기 시작했습니다. –

+0

** 프로젝트를 정리하고 실행하려고 했습니까 ?? –

+0

문제를 해결했습니다. 모든 도움에 감사드립니다 :).나는 4 시간 안에 답변을 게시 할 것이며 지금은 게시 할 자격이 없습니다. – TanDroiD

답변

0

직접 해결했습니다. onActivityResult (이 오류가 발생하는 곳)에서 정수 변수를 초기화하지 않았습니다. 이를 초기화함으로써 문제가 해결되었습니다. 엄청 이상해. 누구든지이 사실을 적절하게 설명 할 수 있다면 그/그녀의 대답을 권합니다.

전 :

int x; 

그게 전부를

int x = 0; 

후!

3

Dalvik 형식으로의 변환이 오류 1로 실패했습니다. "ProGuard의 최적화 단계로 인해 로컬 변수에 대한 디버그 정보가 코드의 최적화와 일관되게 유지되지 않을 수 있습니다.

  • 이 디버그 정보를 유지하지 않으면 피할 수 있습니다 (-keepattributes LocalVariableTable을 지정하지 마십시오).
  • 최적화를 비활성화하여 문제를 해결할 수 있습니다 (proguard-project.txt에 -dontoptimize를 추가하십시오).
  • ProGuard의 최신 버전이 문제를 해결하는지 확인할 수 있습니다 (android-sdk/tools/proguard/lib/proguard.jar을 ProGuard 사이트의 최신 버전으로 바꾸십시오).
  • ProGuard의 최신 버전으로 업데이트해도 도움이되지 않으면 버그를 신고 할 수 있습니다.
0

이클립스가 로컬 변수를 사용하기 전에 초기화하는 것을 인식하지 못했다고 생각합니다. 따라서 코드를 작성하는 동안 사용자에게 경고를 표시하지 않습니다. 그러나 adt는 파일을 컴파일하지 못했습니다. 변수를 초기화하면 TanDroiD에 따르면 문제가 해결됩니다.

0

비슷한 문제가있어서 해결 방법은 -keep class을 원인 클래스의 proguard 구성에 넣는 것입니다. 내 상황에서 그것은 직물에서 클래스 (Crashlytics 라이브러리)이었다

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

관련 문제