Unity Android构建遇jetified-guava与listenablefuture重复类错误
Unity Android构建:Guava与ListenableFuture重复类错误解决方案
问题描述
- Resolver执行成功,但Android构建时触发重复类错误,涉及
jetified-guava-31.1-android.jar与jetified-listenablefuture-1.0.jar - 删除冲突库后可完成构建,但应用无法正常运行
- 当前使用的第三方包:AVPRO、FirebaseCrashlytics、FirebaseAnalytics、FirebaseDynamicLinks
- 相关设置:包含Resolver Android配置、发布设置截图
错误日志
UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <c3a2c42a45424b88b29dfadf7f497cbb>:0) UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <c3a2c42a45424b88b29dfadf7f497cbb>:0) UnityEditor.Android.Command.Run (System.String command, System.String args, System.String workingdir, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <c3a2c42a45424b88b29dfadf7f497cbb>:0) UnityEditor.Android.AndroidJavaTools.RunJava (System.String args, System.String workingdir, System.Action`1[T] progress, System.String error) (at :0) UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, Unity.Android.Gradle.AndroidGradle androidGradle, System.String workingdir, System.String task, System.Action`1[T] progress) (at <c3a2c42a45424b88b29dfadf7f497cbb>:0) Rethrow as GradleInvokationException: Gradle build failed UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, Unity.Android.Gradle.AndroidGradle androidGradle, System.String workingdir, System.String task, System.Action`1[T] progress) (at :0) UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at :0) UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at :0) Rethrow as BuildFailedException: Exception of type 'UnityEditor.Build.BuildFailedException' was thrown. UnityEditor.Android.PostProcessor.CancelPostProcess.AbortBuild (System.String title, System.String message, System.Exception ex) (at :0) UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at :0) UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, AndroidPlayerBuildProgram.Data.AndroidPlayerBuildProgramOutput buildProgramOutput) (at :0) UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at :0) UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.Int32 subtarget, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <36f62d8e760b48f7af5d32916f997ce1>:0) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)
解决方案
1. 强制Gradle依赖统一版本
在Assets/Plugins/Android/mainTemplate.gradle的android代码块外添加以下配置,强制使用指定版本的Guava并排除重复的ListenableFuture库:
configurations.all { resolutionStrategy.force 'com.google.guava:guava:31.1-android' resolutionStrategy.exclude group: 'com.google.guava', module: 'listenablefuture' }
原理:Guava 31.1-android版本已内置ListenableFuture的实现,单独的listenablefuture-1.0.jar会导致类重复,直接排除即可解决冲突。
2. 配置Unity Resolver规则
打开Firebase/Google Play Resolver的配置文件(通常路径为Assets/GooglePlayResolver/Editor/ResolverConfiguration.cs),添加排除规则,让Resolver自动跳过冲突库:
// 在ResolverConfiguration类中添加 public static List<Dependency> GetDependencies() { var dependencies = new List<Dependency>(); // 保留原有依赖配置 dependencies.Add(new Dependency { Group = "com.google.guava", Name = "listenablefuture", Version = "1.0", Exclude = true }); return dependencies; }
也可以修改Packages/manifest.json添加依赖约束:
"dependencies": { // 保留原有依赖 "com.google.guava": "31.1-android", "com.google.guava.listenablefuture": { "version": "1.0", "exclude": true } }
3. 检查AVPRO的依赖冲突
AVPRO可能自带旧版本的Guava或ListenableFuture,打开AVPRO的Android插件设置,尝试禁用其内置的相关库,改用项目统一的依赖包。
4. 清理缓存
- 执行Unity菜单:
Assets > Clear Cache - 删除项目根目录下的
Library、Temp、obj文件夹(操作前建议备份项目) - 清理Gradle缓存:删除本地Gradle缓存目录(Windows:
C:\Users\<用户名>\.gradle\caches;Mac:~/.gradle/caches)
内容的提问来源于stack exchange,提问作者hassan sohail
相关产品推荐
相关产品推荐

