在使用Android Studio中的GameCircleSDK时,多个dex文件定义了Lcom/amazon/ags/BuildConfig。

6

最近我把我的Android项目从Eclipse导入到了AndroidStudio。一切进行得相当顺利,我能够解决大多数问题,但是却遇到了GameCircleSDK库模块的问题。我一直收到以下错误提示:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/amazon/ags/BuildConfig;

事实证明,com.amazon.ags.BuildConfig.class确实包含在两个jar包中:classes.jar(在构建时生成)和GameCircleSDK/libs/gamecirclesdk.jar
我解决这个问题的唯一方法是解压gamecirclesdk.jar,删除BuildConfig.class并重新压缩它。我在互联网上搜索了解决方案,并尝试了此处列出的所有方法,但似乎都不能解决我的问题。我有什么遗漏的地方吗?

您需要将构建文件附加到问题中以获得更好的答案。不清楚在构建过程中生成的classes.jar是什么,以及为什么会包含该类。 - Scott Barta
GameCricleSDK库是Amazon Mobile App SDK的一部分,它不是我的代码。显然没有人在Android Studio中尝试使用这个库... - rossman
我是亚马逊游戏部门的Android开发人员。虽然我不在GameCircle团队工作,但我会将这个问题转达给他们。 - SomeCallMeTim
感谢@SomeCallMeTim的转发! - rossman
2个回答

17
问题在于GameCricleSDK.jar包含一个名为"com.amazon.ags"的包名称的BuildConfig文件,整个模块还生成与清单中声明的相同包名称的BuildConfig文件。我更改了模块清单文件中的包名称,问题消失了。
解决方法:取出GameCircleSDK库,打开其AndroidManifest.xml文件,并将packageName从“com.amazon.ags”更改为其他任何值。我将其更改为“com.amazon.ags.lib”。

我编辑了我的回答,希望现在能够理解。;) - mar3kk
感谢澄清! - rossman
谢谢,我查看了我的库模块中的AndroidManifest.xml文件,并发现了一个我错误地用于新模块的相同包名。 - Mixaz
嗯,首先我会检查是否启用了Proguard,如果启用了,我会禁用它或更改规则以保留缺失的类。 - mar3kk
1
在清单文件中更改包名会导致库项目内的类无法使用库项目中的“res”。这不是一个解决方案,因为在使用库项目时无法将“res”添加到JAR中。 - Hugo Gresse
显示剩余3条评论

0

我在使用另一个库项目(WeiboSDK)时遇到了同样的问题。您可能还需要将库的build.gradle文件中的applicationId更改为库的AndroidManifest.xml中相同的值。


据我所知,最近的Android Gradle插件不再允许在库模块中设置applicationId。 - mar3kk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接