问询:Xamarin是否为所有应用携带Mono运行时?多应用安装是否存局限?
Xamarin运行时相关疑问解答
咱们来逐个拆解你关于Xamarin运行时的几个疑问:
Xamarin是否会为所有应用携带运行时?
得分平台和打包模式来看:- 针对Xamarin.iOS:受苹果App Store规则限制,Xamarin会把Mono运行时和你的应用代码一起静态编译成原生ARM二进制文件,最终安装包里没有独立的Mono运行时,而是把运行时的核心逻辑整合进了应用可执行文件中。
- 针对Xamarin.Android:有两种模式可选:
- 共享运行时模式(默认):应用会依赖设备上已安装的共享Mono运行时包,这种情况下应用本身不会携带完整运行时。
- 嵌入运行时模式:如果开启这个选项,Mono运行时会被直接嵌入到应用安装包里,此时应用会自带专属的运行时。
Xamarin是否会将Mono运行时纳入所有应用安装包?
答案是否定的,这同样取决于平台和打包设置:- Xamarin.iOS:不是完整的Mono运行时包,但安装包会包含静态编译后的运行时相关代码。
- Xamarin.Android:只有开启嵌入运行时选项时,安装包才会包含Mono运行时;共享模式下,应用会调用设备上已有的共享运行时,不会把运行时打包进去。
若设备上安装了两款基于Xamarin的应用,是否会存在两个Mono运行时?
情况也分平台:- Xamarin.iOS:不会。因为每个应用都是静态编译后的原生文件,运行时逻辑已经整合到应用本身里,不存在独立的Mono运行时进程或包,所以不会有多个运行时共存的情况。
- Xamarin.Android:
- 如果两款应用都用共享运行时模式:设备上只会有一个共享的Mono运行时实例,所有同版本的Xamarin应用都会共用它。
- 如果其中一个或两个用了嵌入运行时模式:每个开启嵌入模式的应用都会自带一份Mono运行时,此时设备上会存在多个运行时(共享版 + 每个嵌入版)。
这是否属于Xamarin的局限性?
得辩证看待,不能一概而论:- Xamarin.iOS的静态编译:这其实是受苹果平台规则限制的结果,好处是应用无需依赖外部运行时就能直接运行,但代价是包体积会比原生iOS应用大一些,这是一种权衡,而非绝对的局限性。
- Xamarin.Android的运行时选择:共享模式能减小应用包体积,但需要用户额外安装共享运行时,可能增加安装步骤;嵌入模式虽然包体积大,但应用可以独立运行,不用依赖外部组件。Xamarin提供了两种模式的选择权,所以更像是根据不同需求设计的方案,而非单纯的局限性。
内容的提问来源于stack exchange,提问作者Sankarann
相关产品推荐
相关产品推荐

