Unity 2019.4.40f1构建Android应用时遭遇Duplicate class androidx.annotation.AnimRes重复类错误及相关警告求助
看起来你的问题核心是第三方SDK重复引入AndroidX注解库,加上Unity内置的Gradle构建流程没有自动处理好依赖冲突——毕竟你导出项目后能正常构建,说明手动调整Gradle配置是能解决问题的。下面给你几个针对性的解决方案:
1. 强制统一AndroidX依赖版本(最有效)
在你自定义的gradle.properties里添加这些配置,强制所有依赖使用同一个版本的androidx.annotation,同时开启Jetifier自动迁移旧Support库:
android.useAndroidX=true android.enableJetifier=true # 锁定androidx.annotation的稳定版本,比如1.6.0 androidx.annotation:annotation=1.6.0
Jetifier会自动把第三方SDK里的旧Support库代码转换成AndroidX兼容的版本,统一版本号则能彻底避免重复类冲突。
2. 手动排除重复依赖(精准处理)
如果上面的方法还不行,就修改Unity的自定义Gradle模板,手动移除第三方SDK里的重复依赖:
- 打开Unity的
Edit > Project Settings > Player > Android > Publishing Settings,勾选Custom Gradle Template,生成Assets/Plugins/Android/mainTemplate.gradle文件。 - 打开这个文件,在
dependencies块里给每个可能引入重复注解的第三方库添加排除规则,比如:dependencies { // 排除Google Play Services里的重复注解 implementation('com.google.android.gms:play-services-base') { exclude group: 'androidx.annotation' } // 排除Branch.io里的重复注解 implementation('io.branch.sdk.android:library') { exclude group: 'androidx.annotation' } // Facebook、PlayFab等其他SDK也照此逻辑处理 }
这样就能让Unity只使用你统一指定的androidx.annotation版本,不会再出现重复类错误。
3. 清理缓存解决遗留异常
有时候Unity的缓存会导致依赖解析异常,试试这些操作:
- 关闭Unity,删除项目根目录的
Library、Temp文件夹。 - 删除
Assets/Plugins/Android下除了自定义模板、gradle.properties之外的临时文件。 - 重新打开Unity,等待资源重新导入完成后再尝试构建。
4. 参考导出项目的Gradle配置
既然导出项目能正常构建,你可以对比导出项目的build.gradle和Unity临时生成的Gradle文件(在Temp/gradleOut目录下),找出两者依赖配置的差异,把导出项目里正常的配置复制到Unity的自定义Gradle模板里,这样Unity构建时就会沿用正确的依赖逻辑。
至于那个“mapping new ns”警告,开启Jetifier之后基本会自动解决,如果还有残留,建议把所有第三方SDK更新到支持AndroidX的最新版本——旧版本的SDK可能还在使用旧的Support库路径,导致映射警告。
内容的提问来源于stack exchange,提问作者Adeoon




