Unity gradle构建 - 合并dex存档时出错

10
我尝试首次使用“构建应用程序包(Google Play)”编译我的项目。但是我遇到了一个“合并dex归档时出错”的错误提示。 我认为这是因为我的某些插件正在使用某些Amazon模块的不同版本所致。
控制台中打印的第一个错误:
D8: Program type already present: com.amazon.ags.BuildConfig

UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

当我搜索com.amazon.ags.BuildConfig时,什么都没有找到。(但我的假设可能是错误的)

我尝试通过将mainTemplate.gradle添加到我的项目中来启用multiDex。

defaultConfig {
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        applicationId '**APPLICATIONID**'
        multiDexEnabled true
        ndk {
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'
    }

但我仍然遇到相同的错误,并且无法确定新 Gradle 文件在构建时是否实际包含,或者 Unity 是否只是忽略它。

当构建失败时,会弹出以下错误:

java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
C:\Users\path-to-project\unity\Temp\gradleOut\build\intermediates\transforms\dexBuilder\release\57,
C:\Users\path-to-project\unity\Temp\gradleOut\build\intermediates\transforms\externalLibsDexMerger\release\0,
C:\Users\path-to-project\unity\Temp\gradleOut\build\intermediates\transforms\dexBuilder\release\52.jar,
C:\Users\path-to-project\unity\Temp\gradleOut\build\intermediates\transforms\dexBuilder\release\54.jar

UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

我最近看到许多人通过删除Unity广告和/或Google广告插件并重新启用它们来解决类似的错误,我从未使用过Google广告,但我尝试过移除Unity广告插件,但仍然没有成功,我还尝试了不同版本的Unity广告插件,包括从资产商店下载的和“内置扩展”的版本,但都没有成功。

我已经在这里与一些人讨论过,但是我尝试了他们提供的每个解决方案,都没有成功。

有什么建议可以找出哪个插件导致了这个问题以及如何修复它吗?

2个回答

17

Unity论坛上的一个帖子中,有人最终发布了一个可行的解决方案。我也将在此分享,希望每个遇到这个问题的人都不必像我一样盲目地花费30个小时来解决dex合并冲突。

事实证明,在较新版本的Unity中,需要设置更多选项才能正确构建。

引用RealPpTheBest的回答:

进入“项目设置”>“发布设置”>“代码缩小”,在里面,会有一个“Release”的选项,请将其设置为Gradle。

enter image description here

由于某种原因,在选择gradle构建时,这两个选项不会自动切换,或许在某些情况下它们不必切换。但是,将代码缩小选项设置为Gradle (experimental)会完全解决我在更新Unity后遇到的所有构建错误。

编辑:2019年9月-以上解决方案仍然有效,但请注意:

我最近尝试选择Proguard而不是实验性Gradle缩小器(也可以在下拉菜单中选择)。当正确配置了proguard时,它还将解决您的DEX限制错误,并且消除未使用的代码,甚至可以进一步压缩构建大小。

这篇文章详细介绍了如何启用和配置它。但请记住,配置将因所使用的依赖项而异,因此您可能需要阅读并进行一些自定义配置。


项目设置 -> 玩家 -> 发布设置 -> 缩小 -> 对于发布和调试 = "Proguard" 解决了问题(在导入Facebook SDK之后) - Ahmet Hayrullahoglu
1
很高兴听到我的九月份编辑的解决方案在你的情况下也起作用了!这意味着它可能适用于更多人。 - Rasmus Puls
之后我的游戏在手机上无法加载。 - Abdullah Khan
2
感谢您的回答 :) - mbilalbark
1
@RasmusPuls 你就是所谓的救命恩人! - Squareoot

0

我也遇到了这个错误。我的做法是将最低API级别更改为棉花糖,并在构建设置中检查开发构建。这对我有用。


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