Unity构建Android插件时Gradle重复类错误求助
解决Unity构建时Android模块与unity-classes.jar重复类冲突问题
问题根源
你的testingmodule-runtime模块把Unity核心类(像com.unity3d.player.UnityPlayer这类)打包进了aar里,而Unity自带的unity-classes.jar已经包含这些类,构建时自然会触发重复类报错。
具体解决办法
1. 修改Android库的依赖配置(最稳妥)
打开生成aar的Android库项目的build.gradle,把Unity相关依赖从implementation改成compileOnly——这样编译时会用到这些类,但不会把它们打包进最终的aar:
dependencies { // 把原来的implementation换成compileOnly compileOnly files('libs/unity-classes.jar') // 其他依赖不动,比如Health Connect的依赖 implementation 'androidx.core:core-ktx:1.12.0' }
如果用的是Android Studio新的libs.versions.toml依赖管理,就这么改:
[libraries] unity-classes = { files = ["libs/unity-classes.jar"], configuration = "compileOnly" }
2. 手动清理aar里的重复类
要是没法修改原Android库项目,就直接动手改aar:
- 把aar文件重命名成zip,解压到临时文件夹
- 找到解压后的
classes.jar,用jar命令删掉重复的类:
jar uf classes.jar -M com/unity3d/player/UnityPlayer.class # 所有冲突类都这么删,或者干脆直接删掉整个com/unity3d/player目录
- 把修改后的文件重新打包成zip,再改回.aar后缀就行
3. 让Unity构建时排除重复类
在Unity项目的Assets/Plugins/Android/mainTemplate.gradle里加个打包规则,排除掉重复的类:
android { packagingOptions { exclude 'com/unity3d/player/**' } }
⚠️ 注意:这个方法可能导致运行时找不到类,只有确定aar里的重复类完全由Unity提供时再用。
额外提醒
- 生成aar前一定要检查:你的Android库只放自己的业务代码和Health Connect相关依赖,别把Unity的核心类也塞进去
- 先跑Debug版本验证,Debug模式下重复类检查没那么严格,能更快排查问题
内容的提问来源于stack exchange,提问作者Saad Anees
相关产品推荐
相关产品推荐

