MAUI应用启用AOT编译可显著提升冷启动速度:iOS默认启用(需Release+App Store/Ad-Hoc签名),Android需在.csproj中配置AndroidEnableAot和AndroidUseLLVM,并建议启用链接器;同时应延迟初始化、精简启动资源、关闭调试代理,通过.so文件、Xcode日志或Assembly.IsDynamic验证生效。

MAUI 应用默认使用 JIT(即时编译),启动时需动态编译 IL 代码,影响冷启动速度。开启 AOT(Ahead-of-Time)编译可将 C# 代码提前编译为原生机器码,显著缩短启动时间,尤其在 iOS 和 Android 上效果明显。
启用 AOT 编译(针对 iOS 和 Android)
AOT 在 MAUI 中不是全局开关,需按目标平台显式配置:
- iOS:默认已启用 AOT(通过 LLVM 编译器),无需额外操作;但需确保使用 Release 配置 + App Store 或 Ad-Hoc 签名模式构建,Debug 模式下会被禁用。
-
Android:需在
.csproj文件中添加以下属性:
同时建议启用true true 或SdkOnly Full链接,减小包体积并提升 AOT 效果。
配合启动性能优化的关键设置
AOT 单独启用还不够,需结合其他轻量化策略:
-
延迟初始化非首屏服务:避免在
MauiProgram.CreateMauiApp()中注册大量单例或执行耗时逻辑,改用Lazy或按需构造。 - 精简启动页资源:SplashScreen 图片用最小尺寸、WebP 格式;移除启动页中不必要的动画或绑定。
-
关闭调试代理与热重载:发布包务必使用
--configuration Release构建,并确认和false 已设置。none
验证 AOT 是否生效
构建后检查输出目录和日志:
- Android:查看
bin/Release/net8.0-android/android-arm64/publish/下是否存在*.so文件(如libaot-Mono.Android.dll.so),存在即表示 AOT 成功。 - iOS:Xcode 归档日志中搜索
Running AOT compiler或llvm关键词;同时观察 IPA 包体积是否明显大于未启用 AOT 的版本(AOT 会增大体积,但换得更快启动)。 - 运行时检测:在 App 启动时加日志
Console.WriteLine($"IsJitCompiled: {typeof(App).Assembly.IsDynamic}");—— AOT 下通常为false(非动态程序集)。
基本上就这些。AOT 不是银弹,但它和启动路径瘦身配合起来,能让 MAUI 应用从“能用”走向“顺滑”。注意权衡包体积增长,尤其对网络分发敏感的场景。











