将Unity 2021项目迁移至2022.3.26f1时遇Gradle构建错误
问题概述
将Unity 2021开发的项目迁移至Unity 2022.3.26f1后,无脚本错误但Android编译失败。项目集成Firebase、Facebook和PlayFab SDK,已重新导入SDK且Android Force Resolve执行正常。已解决android.enableR8编译错误,当前存在三个核心问题:
1. 仓库优先级冲突警告
问题表现:Build was configured to prefer settings repositories over project repositories but repository 'Google' was added by build file 'build.gradle'
解决步骤:
由于settingsTemplate.gradle中已设置repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS),所有仓库配置应统一在settings中管理,需修改baseProjectTemplate.gradle,移除allprojects下的冗余仓库配置:
修改后的baseProjectTemplate.gradle核心部分:
allprojects { buildscript { repositories {**ARTIFACTORYREPOSITORY** google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:7.1.2' classpath 'com.android.tools.lint:lint:26.3.2' **BUILD_SCRIPT_DEPS** } } // 移除原有的repositories块 }
2. flatDir使用警告
问题表现:Using flatDir should be avoided because it doesn't support any meta-data formats
解决步骤:
移除所有gradle文件中的flatDir配置:
- 在
settingsTemplate.gradle的dependencyResolutionManagement.repositories中删除flatDir块 - 确保
baseProjectTemplate.gradle中已移除allprojects.repositories下的flatDir块
Unity的Android Resolver会自动处理本地jar包依赖,无需手动配置flatDir。
3. 重复类导致构建失败(核心问题)
问题表现::launcher:checkReleaseDuplicateClasses失败,jetified-facebook-android-wrapper-14.1.0-runtime和jetified-facebook-android-wrapper-17.0.0-runtime存在大量重复类(如com.facebook.android.BuildConfig、com.facebook.unity.BaseActivity)
解决步骤:
- 清理旧版本残留文件:检查项目
Assets/Plugins/Android目录,删除所有版本为14.1.0的Facebook相关jar包 - 排除依赖冲突:修改
mainTemplate.gradle中的Google Ads Mediation Facebook依赖,排除旧版本的facebook-android-wrapper:// 替换原有的mediation依赖 implementation('com.google.ads.mediation:facebook:6.12.0.0') { exclude group: 'com.facebook.android', module: 'facebook-android-wrapper' } - 重新同步依赖:执行Unity菜单
Assets > External Dependency Manager > Android Resolver > Force Resolve - 清理缓存:删除项目根目录下的
Library、Temp、Obj文件夹,重启Unity后重新构建
补充注意事项
- 确保所有SDK版本适配Unity 2022:Firebase SDK已使用11.9.0(符合要求),Facebook SDK保持17.x版本即可
- 验证
mainTemplate.gradle中的compileOptions配置,确保sourceCompatibility和targetCompatibility均为JavaVersion.VERSION_11,与Unity 2022的要求匹配
内容的提问来源于stack exchange,提问作者WatchingSafe

