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

启用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:40:22