Xamarin Forms开启Sdk与用户程序集链接时Google AdMob报错
解决Xamarin Forms开启链接器后AdMob初始化报错的问题
这个问题我之前也碰到过,核心原因就是链接器误删了AdMob初始化需要的关键类——毕竟这些类是通过AndroidManifest.xml注册的,链接器没办法自动识别到它们的引用,直接给优化掉了。这里有几个靠谱的解决办法,既能保住链接器的压缩效果,又能解决报错:
方法一:添加自定义链接器配置文件(最精准)
- 在你的Android项目中新建一个名为
Linker.xml的XML文件 - 右键该文件,将生成操作设置为
LinkDescription - 在文件中添加以下规则,告诉链接器保留AdMob的核心类:
<linker> <!-- 保留AdMob初始化提供者及相关核心类 --> <assembly fullname="Xamarin.GooglePlayServices.Ads"> <type fullname="Com.Google.Android.Gms.Ads.MobileAdsInitProvider" preserve="all" /> <type fullname="Com.Google.Android.Gms.Ads.*" preserve="methods" /> </assembly> <!-- 保留Google服务基础类,避免依赖报错 --> <assembly fullname="Xamarin.GooglePlayServices.Base"> <type fullname="Com.Google.Android.Gms.Common.*" preserve="methods" /> </assembly> </linker>
这种方式只保留必要的类型和方法,不会额外增加太多APK体积,是最优解。
方法二:跳过AdMob相关程序集的链接(最简单)
如果不想写配置文件,也可以直接让链接器忽略AdMob的程序集:
- 右键Android项目 → 属性 → Android选项 → 链接器
- 在跳过链接程序集列表中,添加以下两个程序集:
Xamarin.GooglePlayServices.AdsXamarin.GooglePlayServices.Base
这种方法操作简单,但会保留这两个程序集中的所有代码,相比自定义配置会让APK体积稍大一点,但对于AdMob来说,这个增量非常有限。
额外注意事项
- 确认你的AndroidManifest.xml中已经正确配置了AdMob的App ID,格式如下:
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="你的AdMob App ID"/>
- 既然你已经更新了所有NuGet包,记得确保
Xamarin.GooglePlayServices.Ads和其他Google服务相关包的版本保持一致,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者Gaurav Mathur
相关产品推荐
相关产品推荐

