【问题标题】:Unity gradle build - Error while merging dex archivesUnity gradle build - 合并 dex 档案时出错
【发布时间】:2019-06-16 22:40:41
【问题描述】:

我第一次尝试使用“Build App Bundle (Google Play)”编译我的项目。但是我收到了error while merging dex archives。 我相信这是由于我的一些插件使用了一些亚马逊模块的不同版本

在控制台中打印的第一个错误:

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)

我看到很多人最近通过删除统一广告和/或谷歌广告插件并重新启用它们来解决类似的错误,我从未使用过谷歌广告,但我试图删除统一广告插件,仍然没有雪茄,我还尝试了不同版本的统一广告插件,包括资产商店和“内置扩展”的插件。

我一直在与here 的一些人进行讨论,但我尝试了他们每个人提供的解决方案,但都没有运气。

关于如何找出导致此问题的插件以及如何修复它的任何建议?

【问题讨论】:

    标签: android unity3d gradle build.gradle


    【解决方案1】:

    the thread from unity forum 中的某人终于发布了一个可行的解决方案。我也会在这里分享它,希望每个遇到这个问题的人都不必像我一样花费 30 个小时蒙着眼睛解决 dex 合并冲突。

    事实证明,在更新版本的 unity 中,publish settings 中有更多选项需要设置!

    引用RealPpTheBest的回答

    转到播放器设置 > 项目设置 > 缩小,在那里,那里 将是 Release 的一个选项,将其设置为 Gradle。

    出于某种原因,在选择 gradle build 时,这两个不会自动切换,在某些情况下可能不必如此。但是将 minify 设置为 Gradle (experimental) 完全解决了我在更新 unity 后遇到的所有构建错误。

    编辑:2019 年 9 月 - 上述解决方案应该仍然有效,但是:

    我最近一直在尝试选择 Proguard 而不是实验性的 Gradle minifier(也可以在 dorpdown 中选择)。正确配置后,proguard 还将解决您的 DEX 限制错误,并摆脱未使用的代码,甚至进一步压缩您的构建大小。

    This post 有一个关于如何启用和配置它的非常详细的指南。但请记住,配置对于您使用的依赖项是唯一的,因此您很可能必须在此处阅读并进行一些自定义配置。

    【讨论】:

    • Project Settings -> Player -> Publishing Settings -> Minify -> For Both Release and Debug = "Proguard" 解决了问题(导入 Facebook SDK 后)
    • 很高兴听到我从 9 月开始编辑的解决方案也适用于您的情况!这意味着它可能适用于更多人。
    • 之后我的游戏无法在手机中加载。
    • 感谢您的回答:)
    • @RasmusPuls 你就是所谓的救生员!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      相关资源
      最近更新 更多