在构建适用于Android的APK时,如果您尝试将同一个库添加两次并出现如下错误,则DX工具会失败:
意外的顶层例外:java.lang.IllegalArgumentException: 已添加:Lcom / google / ads / AdRequest $ Gender; 在com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122) 在com.android.dx.dex.file.DexFile.add(DexFile.java:161) 在com.android.dx.command.dexer.Main.processClass(Main.java:685) 在com.android.dx.command.dexer.Main.processFileBytes(Main.java:634) 在com.android.dx.command.dexer.Main.access $ 600(Main.java:78) 在com.android.dx.command.dexer.Main $ 1.processFileBytes(Main.java:572) 在com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) 在com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) 在com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229) 在com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158) 在com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 在com.android.dx.command.dexer.Main.processOne(Main.java:596) 在com.android.dx.command.dexer.Main.processAllFiles(Main.java:498) 在com.android.dx.command.dexer.Main.runMonoDex(Main.java:264) 在com.android.dx.command.dexer.Main.run(Main.java:230) 在com.android.dx.command.dexer.Main.main(Main.java:199) 在com.android.dx.command.Main.main(Main.java:103) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:483) 在SDKMain.main(SDKMain.java:129)1错误;中止
如果我有2个不同的库(jar)包含具有相同包名和名称的类,该怎么办?
如何将这些添加到我的APK中?有没有办法做到这一点?
答案 0 :(得分:0)
首先请注意"已添加"即使两个罐子不在同一个项目中,也可能会弹出错误。例如:将项目链接到包含具有相同类的jar的库项目。
其次:如果你有两个具有相同类文件的jar,构建系统将只使用它看到的第一个。因此,如果您知道您希望运行时使用哪一个,那么解决方案很简单:只需将其放在类路径中。或者从视觉上讲 - 把它放得更高 订单和出口清单:
第三:如果你真的没办法,你可以随时打开一个jar文件(例如使用WinRAR)并删除它的一些类文件。