我将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的所有常见嫌疑人似乎都没问题。
有没有办法打开详细日志记录以更好地了解哪些库存在冲突?
答案 0 :(得分:0)
我不知道如何从DEX获得更好的错误说明,但这里有2条排除故障的建议:
如果使用Android Studio,只需搜索有问题的类FinalizableReference
(在搜索中包含非项目类)。
(使用Command+N
查找课程,或双击Shift
进行"搜索无处不在"。
对于日食:Ctrl+Shift+T
?其他人可以确认。
使用命令行:jar tf mylib.jar | grep FinalizableReference
将在mylib中搜索该类。然后,您可以在jar文件上使用一些shell for
循环(通常在libs目录中)。
此外grep -r FinalizableReference libs/*\.jar
将扫描所有罐子(假设你在库中有它们)并通知那些有匹配的罐子(重复)。