Unity Android命令行构建停滞报错:CommandLineDialog实例化错误
问题分析
从日志看,核心错误是GooglePlayServices.CommandLineDialog被错误地用new关键字实例化,而Unity要求ScriptableObject子类必须通过ScriptableObject.CreateInstance创建。更关键的是,命令行构建模式下没有UI环境,这个Dialog试图弹出窗口但无法渲染,直接导致构建进程停滞。
这个问题来自Google的unity-jar-resolver插件,大概率是插件版本过旧,或是命令行构建时未正确禁用UI交互逻辑。
解决方案
1. 升级Google Jar Resolver插件
这是最直接的修复方式:
- 在Unity Package Manager中找到
Google Play Services Resolver(或同类命名包),直接更新到最新版本。新版本已修复命令行构建时的Dialog实例化问题,且会自动适配无UI环境。 - 如果是通过AssetStore导入的插件,重新下载最新版本覆盖旧文件。
2. 完善命令行构建参数
确保构建命令包含以下参数,彻底禁用UI相关功能:
Unity -batchmode -nographics -quit -executeMethod YourBuildScriptMethod -buildTarget Android
-batchmode:强制Unity进入批处理模式,禁用所有弹窗与交互-nographics:禁用图形界面,适配无UI的服务器构建场景-quit:构建完成后自动退出Unity
3. 手动强制依赖解析(升级后仍有问题时)
在项目Editor文件夹下添加预处理脚本,强制PlayServicesResolver在构建前完成依赖解析且不弹出对话框:
using UnityEditor; using GooglePlayServices; public class PreBuildResolver { [MenuItem("Tools/Resolve Dependencies")] public static void ResolveDependencies() { PlayServicesResolver.ResolveSync(true, true); // 第二个参数设为true禁用UI弹窗 } [InitializeOnLoadMethod] public static void AutoResolveOnLoad() { ResolveDependencies(); } }
脚本会在Unity启动时自动执行依赖解析,也可手动通过菜单栏触发。
4. 清除缓存重置项目
若以上方法无效,尝试清除缓存重置环境:
- 删除项目根目录下的
Library文件夹,让Unity重新导入资源 - 删除
Temp和Obj文件夹 - 清除Gradle缓存(默认路径:
~/.gradle/caches或C:\Users\<你的用户名>\.gradle\caches)
内容的提问来源于stack exchange,提问作者Batman
相关产品推荐
相关产品推荐

