Xamarin Forms集成Azure通知中心推送在Release模式下接收通知崩溃如何解决
问题根因
你遇到的崩溃是Xamarin.Android Release模式下链接器裁剪导致的:
Debug模式默认关闭了SDK程序集的裁剪逻辑,所有SDK方法都被保留;Release模式下链接器会静态分析代码引用,移除未被检测到的方法,而Azure通知中心SDK的BasicNotificationMessage.getData()方法是通过JNI调用的,链接器无法识别到你代码里对INotificationMessage.Data的访问最终会调用到这个Java层方法,因此直接裁剪了该方法,导致运行时找不到方法抛出异常。
修复步骤
- 第一步:在你的Xamarin.Android项目根目录下新建名为
linker.xml的配置文件,文件内容如下:
<linker> <!-- 保留Azure通知中心SDK的相关类不被链接器裁剪 --> <assembly fullname="Microsoft.Azure.NotificationHubs.Android"> <type fullname="com.microsoft.windowsazure.messaging.notificationhubs.BasicNotificationMessage" preserve="all" /> </assembly> </linker>
如果配置后仍有同类型的方法找不到错误,可以直接保留整个Azure通知中心程序集不被裁剪,修改配置为:
<linker> <assembly fullname="Microsoft.Azure.NotificationHubs.Android" preserve="all" /> </linker>
- 第二步:右键点击
linker.xml文件,选择「属性」,将文件的生成操作设置为LinkDescription,保证打包时链接器会读取该配置。 - 第三步:重新编译Release版本的安装包即可解决崩溃问题。
验证方案(可选)
如果修改后仍有问题,可以先临时修改链接器配置定位问题:
打开Xamarin.Android项目的属性页 -> 选择「Android选项」 -> 将「链接」属性从「仅SDK程序集」修改为「无」,重新打Release包测试。如果此时不再崩溃,就可以确认是链接器裁剪导致的问题,检查linker.xml的配置和生成操作是否正确即可。
内容的提问来源于stack exchange,提问作者JesusHF
相关产品推荐
相关产品推荐

