我可以启用DEX详细日志记录吗?

时间:2014-05-23 07:39:59

标签: android intellij-idea

我将Android IntelliJ IDEA项目从一个位置移动到另一个位置。出于某种原因,IDEA丢失了所有模块,我不得不重新导入它们。

现在当我编译时,我得到了这个DEX错误:

Error:Android Dex: [MyApp] Unable to execute DX 
Error:Android Dex: [MyApp] com.android.dex.DexException: Multiple dex files define Lcom/google/common/base/FinalizableReference; 
Error:Android Dex: [MyApp] at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) 
Error:Android Dex: [MyApp] at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) 
Error:Android Dex: [MyApp] at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533) 
Error:Android Dex: [MyApp] at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170) 
Error:Android Dex: [MyApp] at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) 
Error:Android Dex: [MyApp] at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) 
Error:Android Dex: [MyApp] at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)     
Error:Android Dex: [MyApp] at com.android.dx.command.dexer.Main.run(Main.java:230) 
Error:Android Dex: [MyApp] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
Error:Android Dex: [MyApp] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
Error:Android Dex: [MyApp] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
Error:Android Dex: [MyApp] at java.lang.reflect.Method.invoke(Method.java:597) 
Error:Android Dex: [MyApp] at org.jetbrains.android.compiler.tools.AndroidDxRunner.runDex(AndroidDxRunner.java:161)      
Error:Android Dex: [MyApp] at org.jetbrains.android.compiler.tools.AndroidDxRunner.main(AndroidDxRunner.java:294) 
Error:Android Dex: [MyApp] at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:121)

我无法弄清楚原因是什么,多个JAR的所有常见嫌疑人似乎都没问题。

有没有办法打开详细日志记录以更好地了解哪些库存在冲突?

1 个答案:

答案 0 :(得分:0)

我不知道如何从DEX获得更好的错误说明,但这里有2条排除故障的建议:

  1. 如果使用Android Studio,只需搜索有问题的类FinalizableReference(在搜索中包含非项目类)。 (使用Command+N查找课程,或双击Shift进行"搜索无处不在"。 对于日食:Ctrl+Shift+T?其他人可以确认。

  2. 使用命令行:jar tf mylib.jar | grep FinalizableReference将在mylib中搜索该类。然后,您可以在jar文件上使用一些shell for循环(通常在libs目录中)。 此外grep -r FinalizableReference libs/*\.jar将扫描所有罐子(假设你在库中有它们)并通知那些有匹配的罐子(重复)。