You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity 2019.4.40f1构建Android应用时遭遇Duplicate class androidx.annotation.AnimRes重复类错误及相关警告求助

解决Unity构建Android时的Duplicate Class androidx.annotation.AnimRes错误及Mapping警告

看起来你的问题核心是第三方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里的重复依赖:

  1. 打开Unity的Edit > Project Settings > Player > Android > Publishing Settings,勾选Custom Gradle Template,生成Assets/Plugins/Android/mainTemplate.gradle文件。
  2. 打开这个文件,在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,删除项目根目录的LibraryTemp文件夹。
  • 删除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

火山引擎 最新活动