Unity集成Google Mobile Ads遇System.MissingMethodException求助
解决Unity Admob插件Play Service Resolver解析时的MissingMethodException错误
这个问题我帮不少开发者排查过,核心原因是Google的Unity Jar Resolver插件在尝试调用Unity版本控制API时失败——要么你的Unity版本里这个API的签名已经变了,要么你压根没启用Unity的版本控制功能。结合你提供的报错日志,给你几个靠谱的解决步骤:
方案1:启用Unity版本控制功能
这是最常见的解决方法,因为插件需要修改项目设置文件,需要版本控制的Checkout权限:
- 打开Unity编辑器,顶部菜单选择
Edit > Project Settings > Version Control - 把
Mode选项从Disabled切换成Visible Meta Files(如果用Git的话选这个就行)或者你正在使用的版本控制模式 - 重启Unity,然后重新执行Play Service Resolver的自动解析操作
方案2:升级Google Mobile Ads插件到兼容版本
你当前使用的v3.18.2版本比较老旧,可能和你用的新Unity版本(比如2020及以上)的API不兼容:
- 先在Unity的Package Manager里移除旧的Google Mobile Ads插件
- 安装最新稳定版的Google Mobile Ads插件(推荐v4.x及以上版本,已经适配了新Unity的版本控制API)
- 重新配置Android设备设置后再运行解析
方案3:手动修改插件代码(应急临时方案)
如果暂时没法升级插件,可以临时修改报错的插件代码来适配Unity版本:
- 找到报错文件:
Assets/Google/VersionHandlerImpl/ProjectSettings.cs - 定位到第119行调用
Checkout的代码,把原来的单个string参数改成数组形式:// 原来的代码 UnityEditor.VersionControl.Task task = UnityEditor.VersionControl.Provider.Checkout(path, UnityEditor.VersionControl.CheckoutMode.Asset); // 修改后的代码(适配Unity 2020+) UnityEditor.VersionControl.Task task = UnityEditor.VersionControl.Provider.Checkout(new[] { path }, UnityEditor.VersionControl.CheckoutMode.Asset); - 保存后重新运行解析即可,注意:后续升级插件时这个修改会被覆盖,所以还是优先用前两个方案
你提供的错误日志参考:
Stopped polling job due to exception: System.MissingMethodException: UnityEditor.VersionControl.Task UnityEditor.VersionControl.Provider.Checkout(string,UnityEditor.VersionControl.CheckoutMode) at Google.ProjectSettings.Set[T] (System.String name, T value) [0x00024] in /Users/smiles/dev/src/unity-jar-resolver/source/VersionHandlerImpl/src/ProjectSettings.cs:119 at Google.ProjectSettings+c__AnonStorey2.<>m__5 () [0x00000] in /Users/smiles/dev/src/unity-jar-resolver/source/VersionHandlerImpl/src/ProjectSettings.cs:154 at Google.ProjectSettings.SavePreferences (Google.ProjectSettings+SettingsSave saveLevel, System.Action saveToProject, System.Action saveToEditor) [0x00035] in /Users/smiles/dev/src/unity-jar-resolver/source/VersionHandlerImpl/src/ProjectSettings.cs:135 at Google.ProjectSettings.SetBool (System.String name, System.Boolean value) [0x00014] in /Users/smiles/dev/src/unity-jar-resolver/source/VersionHandlerImpl/src/ProjectSettings.cs:153 at GooglePlayServices.SettingsDialog.set_UseJetifier (System.Boolean value) [0x00000] in /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/SettingsDialog.cs:225 at GooglePlayServices.PlayServicesResolver.CanEnableJetifierOrPromptUser (System.String titlePrefix) [0x00179] in /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:2270 at GooglePlayServices.PlayServicesResolver.ResolveUnsafe (System.Action`1[T] resolutionComplete, System.Boolean forceResolution, System.Boolean isAutoResolveJob, System.Boolean closeWindowOnCompletion) [0x00012] in /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1610 at GooglePlayServices.PlayServicesResolver+<ScheduleResolve>c__AnonStorey1E.<>m__40 () [0x00000] in /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1579 at GooglePlayServices.PlayServicesResolver.ExecuteNextResolveJob () [0x00069] in /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1438 at GooglePlayServices.PlayServicesResolver.ScheduleResolve (System.Boolean forceResolution, System.Boolean closeWindowOnCompletion, System.Action`1[T] resolutionCompleteWithResult, System.Boolean isAutoResolveJob) [0x000a7] in /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1592 at GooglePlayServices.PlayServicesResolver.AutoResolve (System.Action resolutionComplete) [0x00017] in /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1113 at GooglePlayServices.PlayServicesResolver.m__48 () [0x00016] in /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1092 at Google.RunOnMainThread.ExecutePollingJobs () [0x0004a] in /Users/smiles/dev/src/unity-jar-resolver/source/VersionHandlerImpl/src/RunOnMainThread.cs:300 UnityEngine.Debug:LogError(Object) Google.RunOnMainThread:ExecutePollingJobs() (at /Users/smiles/dev/src/unity-jar-resolver/source/VersionHandlerImpl/src/RunOnMainThread.cs:303) Google.RunOnMainThread:m__17() (at /Users/smiles/dev/src/unity-jar-resolver/source/VersionHandlerImpl/src/RunOnMainThread.cs:414) Google.RunOnMainThread:RunAction(Action) (at /Users/smiles/dev/src/unity-jar-resolver/source/VersionHandlerImpl/src/RunOnMainThread.cs:234) Google.RunOnMainThread:ExecuteAll() (at /Users/smiles/dev/src/unity-jar-resolver/source/VersionHandlerImpl/src/RunOnMainThread.cs:406) UnityEditor.EditorApplication:Internal_CallUpdateFunctions()
内容的提问来源于stack exchange,提问作者Christopher Stupák
相关产品推荐
相关产品推荐

