9

我正在尝试将项目迁移到 Android Studio / Gradle,但我遇到了一个奇怪的问题,即使用 Ant 可以正常工作的 jar 。似乎 R 和 BuildConfig 包含在 jar 中,并且它们的包名声明为大写,而实际上包结构将其定义为小写。(我已更改包名称以保护开发人员的匿名性,希望没关系)

意外的顶级异常:
com.android.dx.cf.iface.ParseException:类名(com/companyname/UI/BuildConfig)与路径不匹配(com/companyname/ui/BuildConfig.class) 在 com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:520) 在 com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) 在 com.android.dx.cf .direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) 在 com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) 在 com.android.dx.command.dexer.Main.processClass(Main .java:665) 在 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。直接.ClassPathOpener.processOne(ClassPathOpener.java:166) 在 com.android.dx.command.dexer.Main.processOne(Main.java:596) 在 com.android.dx 的 com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) .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) ...在解析 com/companyname/ui/BuildConfig.classrunMonoDex(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) ...同时解析 com/companyname/ui/BuildConfig.classrunMonoDex(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) ...同时解析 com/companyname/ui/BuildConfig.class

以下是我的问题:

  • 为什么它适用于 Ant 而不是 Gradle?
  • 这应该被视为缺陷/错误还是设计决策?
  • 为什么我在互联网上找不到其他罐子有这个问题的人?
  • 关于如何纠正问题,我可以向开发人员提供什么建议?
4

2 回答 2

5

I think if you rebuild the library and exclude everything from the /gen directory, everything should work fine.

于 2013-11-19T15:39:47.957 回答
2

当 Play 中的包名 (com.checkpoint.DocSec) 与本地目录 (com.checkpoint.docsec) 不同时,我就发生了这种情况,并且本地文件系统的文件不敏感性搞砸了构建过程。

据此我可以将清单中的包名称更改为 com.checkpoint.capsule.docs (这并不重要,只要它不一样,区分大小写),并将应用程序 ID 设置为build.gradle 到 com.checkpoint.DocSec (保持它与原来完全相同非常重要!!!)。

这为我解决了这个问题。

于 2014-11-23T15:02:56.107 回答