启用Linker导致MvvmCross的MvxApplication Initialize未被调用
解决MvvmCross在Android 12(API 31)启用Linker时Initialize方法不执行的问题
精准保留MvvmCross核心类型与方法
别盲目往LinkerPleaseInclude.cs里堆代码,直接针对启动流程的关键类型做保留,避免MvxApplication的Initialize方法被裁剪:public class LinkerPleaseInclude { // 强制保留MvxApplication的Initialize方法 public void Include(MvxApplication app) { app.Initialize(); } // 保留自定义AppStart实例 public void Include(YourCustomAppStart appStart) { var _ = appStart.GetType(); } // 保留启动流程依赖的核心接口 public void Include(IMvxAppStart appStart) { appStart.Start(default); } }检查Application类配置
升级Android 12后,确认AndroidManifest.xml里的<application>标签正确指定了你的MvxApplication子类,路径和类名不能错:<application android:name=".YourCustomMvxApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" ...> </application>开启Linker日志定位问题
在项目属性的Android高级设置里打开「Enable linker logging」,构建后查看生成的linker-log.txt,搜索MvxApplication、Initialize、IMvxAppStart这些关键词,找到被标记为removed的条目,针对性添加保留规则。调整Linker模式并添加程序集保留规则
如果“仅链接SDK程序集”还是有问题,切换到“链接SDK程序集和用户程序集”,然后创建Linker.xml文件添加MvvmCross核心程序集的保留:<?xml version="1.0" encoding="utf-8" ?> <linker> <assembly fullname="MvvmCross" preserve="all"/> <assembly fullname="MvvmCross.AndroidX.Core" preserve="all"/> <assembly fullname="MvvmCross.AndroidX" preserve="all"/> <!-- 按需添加你用到的其他MvvmCross AndroidX程序集 --> </linker>验证MvvmCross版本兼容性
确保你用的MvvmCross版本完全支持Android 12和AndroidX,建议升级到最新稳定版,旧版本可能存在兼容性bug导致启动流程被Linker干扰。
内容的提问来源于stack exchange,提问作者c.lamont.dev
相关产品推荐
相关产品推荐

