android - Unity gradle build - 合并 dex 文件时出错

标签 android unity3d gradle build.gradle

我第一次尝试使用“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 文件是否在构建时实际包含在内,或者统一是否只是忽略它。

这是构建失败时弹出的错误:
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)

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

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

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

最佳答案

有人在the thread from unity forum终于发布了一个可行的解决方案。我也会在这里分享它,希望每个遇到这个问题的人都不必像我一样花费 30 个小时蒙眼解决 dex 合并冲突。
事实证明,随着新版本的统一,publish settings 中有更多选项。需要设置!
引用 RealPpTheBest 的回答

Go to player settings > Project Settings > Minify, in there, there will be an option of Release, set it to Gradle .


enter image description here
出于某种原因,在选择 gradle build 时,这两个不会自动切换,也许在某些情况下它们不必如此。但是将 minify 设置为 Gradle (experimental)完全解决了我在更新 unity 后遇到的所有构建错误。
编辑:2019 年 9 月 - 上述解决方案应该仍然有效,但是:
我最近一直在尝试选择Proguard而不是实验性的 Gradle 缩小器(也可以在 dorpdown 中选择)。正确配置后,proguard 还将解决您的 DEX 限制错误,并摆脱未使用的代码,甚至进一步压缩您的构建大小。
This post有一个关于如何启用和配置它的非常详细的指南。但请记住,配置对于您使用的依赖项将是唯一的,因此您很可能必须在此处阅读并进行一些自定义配置。

关于android - Unity gradle build - 合并 dex 文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56623107/

相关文章:

c# - 无法更改 Unity 中检查器变量中的数组大小?

ios - 错误 : You are not allowed to remove the Unity splash screen from your game

database - 如何在使用gradle测试之前重建数据库?

gradle - Gradle任务声明的完整语法

android - 服务的应用程序权限

unity3d - Unity vs Udk vs CryEngine

android - 由于 NDK 路径中的反斜杠,Qt Creator 无法构建 Android 库

gradle - 如何在Gradle中合并属性文件?

android - 7x5 网格,方形元素可见,无需滚动

Android -- 如何将 View 定位到屏幕外?