You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2022开发Xamarin应用集成AdMob时AdView.LoadAd报错求助

Xamarin.Android 集成AdMob时LoadAd抛出getClass类型异常修复方案

错误诱发原因

该异常属于Google Play Services(GMS)依赖版本冲突导致的运行时类校验错误:当项目中引用的AdMob相关NuGet包和其他GMS基础依赖包版本不匹配时,com.google.android.gms.dynamic.Object类会被重复加载不同版本的字节码,类校验阶段判定Object.getClass()方法的类型标记不符合预期,最终在调用adView.LoadAd()触发类加载时抛出异常,和当前写的广告加载业务代码逻辑无直接关联。
常见触发场景包括:

  • 项目中不同GMS系NuGet包版本号不一致,比如Ads包版本较高,但依赖的Base、Basement等基础包被自动降级到低版本
  • 链接器错误裁剪了AdMob相关的必要类,导致运行时类签名不匹配
  • 使用了过时的Xamarin.GooglePlayServices.Ads包,和当前VS2022安装的Xamarin.Android SDK版本不兼容

修复步骤

  1. 统一所有GMS依赖版本
    打开Android项目的NuGet包管理面板,将所有前缀为Xamarin.GooglePlayServices.的包全部升级到同一稳定版本,重点核对以下包的版本号完全一致:
    • Xamarin.GooglePlayServices.Ads
    • Xamarin.GooglePlayServices.Base
    • Xamarin.GooglePlayServices.Basement
    • Xamarin.GooglePlayServices.Tasks
      如果项目同时集成了Firebase相关服务,也要将所有Xamarin.Firebase前缀的包升级到和当前GMS版本匹配的对应版本,避免依赖传递带来的隐式版本冲突。
  2. 补全AdMob全局初始化逻辑
    不能在创建AdView实例时直接加载广告,必须先在MainActivity.OnCreate生命周期中完成AdMob SDK全局初始化,再执行页面加载、广告创建逻辑:
    // MainActivity.cs 的OnCreate方法中,在LoadApplication(new App())之前添加
    MobileAds.Initialize(this);
    
  3. 调整链接器配置避免类被裁剪
    打开Android项目属性,进入「Android选项-链接器」设置页:
    • 如果当前链接器行为选择的是「Sdk和用户程序集」,建议测试时先改成「仅Sdk程序集」验证问题是否消失
    • 如需保留全量链接配置,可在项目中新增LinkerPleaseInclude.cs文件,写入以下代码强制保留AdMob相关类,避免被链接器误裁剪:
    using Android.Gms.Ads;
    public class LinkerPleaseInclude
    {
        public void PreserveAdsTypes()
        {
            _ = new AdView(null);
            _ = new AdRequest.Builder().Build();
        }
    }
    
  4. 全量清理重建项目
    关闭Visual Studio,手动删除Android项目目录下的bin、obj文件夹,重新打开解决方案后依次执行「清理解决方案」「还原NuGet包」,再重新编译部署到设备测试,不要直接使用增量编译的旧构建产物。

验证小技巧:如果完成以上步骤后仍报错,可以临时把自适应横幅AdSize改成固定值AdSize.Banner测试,排除自适应广告API的版本兼容问题,确认基础广告加载正常后再切回自适应尺寸即可。

内容的提问来源于stack exchange,提问作者James Dsouza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:21:27