2013-05-28 21 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運行應用程序時發生。

我已經閱讀了與此相關的數以千計的線程。他們都沒有工作。這當然不是「清潔/構建」問題。 對我來說,這似乎是一個Eclipse或Proguard問題。我已經浪費了12個小時的時間。請有人救我。任何人有任何線索?

+0

什麼,當你與最新版本ADT V22運行它發生?就個人而言,在Google I/O期間,新的ADT v22搞砸了我設置的整個Eclipse/ADT,因爲它改變了許多工具的位置,所以我懷疑它也會爲你做同樣的事情,但是在我重新安裝Eclipse和ADT v22從零開始,加上一個全新的Android-sdk文件夾,一切都開始工作再次完美。 –

+0

你有沒有嘗試**清理**項目,然後運行? –

+0

我已經解決了這個問題。感謝所有的幫助:)。我會在4個小時內發佈答案,但現在沒有資格發佈。 – TanDroiD

回答

0

我自己解決了。在onActivityResult(這個錯誤被拋出)在一個地方,我沒有初始化一個Integer變量。通過初始化,問題得到解決。很奇怪。如果任何人都可以正確解釋,我會建議他/她的答案。

前:

int x; 

完蛋了之後

int x = 0; 

3

「本地無效...轉換爲Dalvik格式失敗,錯誤1」可能是由ProGuard的優化步驟引起的,該步驟無法始終保持有關本地變量的調試信息與代碼優化一致。

  • 您可以通過不保留此調試信息來避免它(不要指定-keepattributes LocalVariableTable)。
  • 您可以通過禁用優化來解決該問題(將-dontoptimize添加到您的proguard-project.txt中)。
  • 你可以檢查最新版本的ProGuard是否解決了這個問題(用ProGuard網站的最新版本替換android-sdk/tools/proguard/lib/proguard.jar)。
  • 如果更新到最新版本的ProGuard沒有幫助,您可以報告一個錯誤。
0

我覺得eclipse在使用它之前未能識別出初始化局部變量。所以它在編寫代碼時不會向用戶顯示警告。但是adt無法編譯文件。 根據TanDroiD,如果你初始化變量你的問題將被解決。

0

我有一個類似的問題,解決方案是將-keep class放入引起類的proguard配置。在我的情況是從面料類(Crashlytics庫)

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

相關問題