我正在尝试将一个项目迁移到 Android Studio/Gradle,但我遇到了一个奇怪的问题,该 jar 使用 Ant 运行良好。似乎 R 和 BuildConfig 包含在 jar 中,并且它们的包名称被声明为大写,而实际上包结构将其定义为小写。 (为了保护开发者的匿名性,我更改了包名,希望没问题)
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: class name (com/companyname/UI/BuildConfig) does not match path (com/companyname/ui/BuildConfig.class) at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:520) at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) at com.android.dx.command.dexer.Main.processClass(Main.java:665) at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634) at com.android.dx.command.dexer.Main.access$600(Main.java:78) at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572) at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) at com.android.dx.command.dexer.Main.processOne(Main.java:596) at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264) at com.android.dx.command.dexer.Main.run(Main.java:230) at com.android.dx.command.dexer.Main.main(Main.java:199) at com.android.dx.command.Main.main(Main.java:103) ...while parsing com/companyname/ui/BuildConfig.class
这是我的问题:
- 为什么它适用于 Ant 而不是 Gradle?
- 这应该被视为缺陷/错误还是设计决策?
- 为什么我在互联网上找不到其他人对其他 jar 有此问题?
- 我可以就如何更正问题向开发人员提供哪些建议?
最佳答案
我认为如果您重建库并从/gen 目录中排除所有内容,一切都应该可以正常工作。
关于android - DEX 无法使用 Gradle 解析包含 BuildConfig 和 R 的 jar,但可以与 Ant 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934681/