android - Unity gradle build - 合并 dex 档案时出错
问题描述
我第一次尝试使用“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)
我看到很多人最近通过删除统一广告和/或谷歌广告插件并重新启用它们来解决类似的错误,我从未使用过谷歌广告,但我试图删除统一广告插件,仍然没有雪茄,我也试过使用来自资产商店和“内置扩展”的不同版本的统一广告插件仍然没有骰子。
我一直在这里与一些人进行讨论,但我尝试了他们每个人提供的解决方案,但没有运气。
关于如何找出导致此问题的插件以及如何修复它的任何建议?
解决方案
来自统一论坛的帖子中的某个人终于发布了一个可行的解决方案。我也会在这里分享它,希望每个遇到这个问题的人都不必像我一样花费 30 个小时蒙眼解决 dex 合并冲突。
事实证明,随着新版本的统一publish settings
,需要设置更多选项!
引用RealPpTheBest的回答
转到 player settings > Project Settings > Minify,在那里会有一个 Release 选项,将其设置为 Gradle 。
出于某种原因,在选择 gradle build 时,这两个不会自动切换,也许在某些情况下它们不必如此。但是设置 minify 以Gradle (experimental)
完全解决我在更新 unity 后遇到的所有构建错误。
编辑:2019 年 9 月 - 上面的解决方案应该仍然有效,但是:
我最近一直在尝试选择Proguard
而不是实验性的 Gradle 缩小器(也可以在 dorpdown 中选择)。正确配置后,proguard 还将解决您的 DEX 限制错误,并摆脱未使用的代码,甚至进一步压缩您的构建大小。
这篇文章有一个关于如何启用和配置它的非常详细的指南。但请记住,配置对于您使用的依赖项将是唯一的,因此您很可能必须在此处阅读并进行一些自定义配置。
推荐阅读
- android - android accessibilityNodeInfo 和更改可访问性角色问题
- python - 阶乘代码不返回整数及其之前的所有整数的乘积
- python - rasterio 当数据中存在 nodata 值时该怎么办
- c - 为什么这个从文件中读取/写入整数数组的 C 代码不起作用?
- python - 以 Pandas Dataframe 作为值的字典的 JSON 格式
- amazon-web-services - 如何通过 cli 命令创建具有“另一个 AWS 账户”角色类型的“角色”?
- google-chrome - 如何禁用 Chrome 自动填充功能(2020 年后)
- r - 为R中的数字系列编写一个for循环
- python - 带有不记名令牌的 Python 请求返回 401
- javascript - React 一次增加所有计数器:如何为多个组件重用处理函数